# because it is in an 'eval' statement.
eval $1='$ret'
}
+
+#
+# Replaces escape sequences in $1 with the proper values for the vserver $2.
+# The result is put on stdout. If $2 is empty, values for the host are
+# replaced. The following values are replaced:
+#
+# %% Literal %
+# %h The short hostname (as returned by hostname -s)
+# %H The full hostname (as returned by hostname --fqdn)
+# %n The vserver name, or empty for the host
+# %N The vserver name, or "host" for the host
+# %v The vserver root directory, or empty for the host
+#
+# Note that the given vserver must be running!
+#
+function interpolate() {
+ path=$1
+ vsname=$2
+ vexec=${vsname:+$VSERVER $vsname exec }
+ # Find the values to replace
+ h=`$vexec hostname -s`
+ H=`$vexec hostname --fqdn`
+ n=$vsname
+ N=${vsname:-host}
+ v=${vsname:+$VROOTDIR/$vsname}
+
+ expr=''
+ for var in h H n N v; do
+ # Do indirect lookup of the value to replace
+ val=${!var}
+ # Escape slashes (twice, bash seems to eat one somewhere)
+ val=`echo "$val" | sed 's#/#\\\\/#g'`
+ # Add replacement pattern. The first part checks that there is
+ # an odd number of percent signs before the variable, so
+ # double % is properly left alone.
+ expr="${expr}s/\(\(^\|[^%]\)\(%%\)*\)%$var/\1$val/g;"
+ done
+ # Finally replace literal % signs
+ expr="${expr}s/%%/%/g"
+
+ # Do the actual interpolation
+ echo $path | sed "$expr"
+}
pear = no thanks \\
i will not have a pear.
+.SH INTERPOLATION
+
+Some handlers will support path interpolation for some of their configuration variables. Interpolation allows you to give a config variable a different value, depending on the host or vserver it is used in. See the documentation for each handler for which variables are interpolated.
+
+The following interpolation variables are available:
+
+.IP %h
+The short hostname (output of `hostname -s`).
+
+.IP %h
+The full hostname (output of `hostname --fqdn`).
+
+.IP %n
+The name of the vserver running in, or the empty string when running on the host.
+
+.IP %N
+The name of the vserver running in, or "host" when running on the host.
+
+.IP %v
+The root direcotry of the vserver running in, or the empty string when running on the host.
+
+.IP %%
+A literal %.
+
+For example, the following would backup the foo and bar vservers to /var/backups/foo and /var/backups/bar respectively.
+
+ backupdir = /var/backups/%n
+ vsnames = foo bar
+
.SH SEE ALSO
.BR backupninja (1),
.BR ninjahelper (1),