Hi Martin, Perhaps:
========================================= #!/bin/bash -x [ -n "$DEBUG" ] && set -o xtrace declare -a inparms declare -i i=0 while true; do inparms[$i]="${1/\"/\\\"}" shift || break i=$(( $i + 1 )) done printargs() { local -i j=0 while [ $j -lt $i ] ; do printf ' "%s"' "${inparms[$j]}" j=$(( $j + 1 )) done } # in the script, the CMD is built up as a string CMD="touch `printargs`" # in practice we somtimes use /sbin/runuser -c # and other times plain bash -c bash -c "$CMD" ========================================= Line 9 is an ugly hack, and quite possibly a bashism. Hope this is some use, Andrew McMillan. On Mon, 2009-04-27 at 22:37 +0200, Martin Langhoff wrote: > Hi all, > > I have a simple shell scripting problem :-) you'll find attached a > shell script that ships with ejabberd. It is a fairly straightforward > bit of code, and allows us to control bits of the ejabberd internals > with a nice cli interface. (Feel free to skip the start / stop bits of > the code, I'm fighting with the ctrl function.) > > The problem it has is that the parameters are passed to a bash or > runas invocation -- at which point the quoting is a mess. Currently I > am working around it in the caller by doing some stupid > nested-quoting. But this should be easy to cure -- if anyone knows a > bit more bash (or portable shell!) than me :-) > > A minimal exposition of the problem is as follows: > > $ cat sample.sh > #!/bin/bash -x > > # in the script, the CMD is built up as a string > CMD="touch $@" > # in practice we somtimes use /sbin/runuser -c > # and other times plain bash -c > bash -c "$CMD" > > # this invokation does the wrong thing - > $ ./sample.sh ./sample.sh "this is file one" "this is file two" > # the ugly workaround is > ./sample.sh "'this is file one'" "'this is file two'" > > Any hints that don't involve a rewrite? > > cheers, > > > > martin-who's-easily-stumped-with-shell-backwardnesss ------------------------------------------------------------------------ andrew (AT) morphoss (DOT) com +64(272)DEBIAN You will be awarded a medal for disregarding safety in saving someone. ------------------------------------------------------------------------ _______________________________________________ Server-devel mailing list server-de...@lists.laptop.org http://lists.laptop.org/listinfo/server-devel