[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/2] utils: escape arguments in fakeroot.sh
From: |
Ivan Shmakov |
Subject: |
Re: [PATCH 1/2] utils: escape arguments in fakeroot.sh |
Date: |
Sun, 25 Aug 2013 16:57:26 +0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.4 (gnu/linux) |
>>>>> Justus Winter <4winter@informatik.uni-hamburg.de> writes:
>>>>> Quoting Ivan Shmakov (2013-08-25 17:55:39)
[…]
>> /bin/fakeauth /bin/sh \
>> -c 'cd "$1" || exit ; shift ; exec "$@"' \
>> dummy.sh "$(pwd)" "$@" \
> ?
The essential point is that using -c doesn’t prevent one from
passing command line arguments (and the value for $0) to the
script, thus the following two forms are both perfectly valid:
$ sh -c 'printf :%s\\n "$@"' \
my.sh foo bar
$ sh my.sh foo bar
The only difference is that the first command doesn’t actually
/read/ my.sh. (But it sets $0 to my.sh anyway.)
Specifically, the code suggested sets the $0, $1, … values for
the spawned (-c) shell code to “dummy.sh”, the current working
directory, and this shell’s own positional arguments,
respectively. Then, ‘shift’ drops the directory (initially $1),
and the remaining positional arguments ("$@") of the child would
be a copy of that of the parent.
… But probably the best part of it is that this behavior is
specified by POSIX:
--cut: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html --
-c Read commands from the command_string operand. Set the value of
special parameter 0 (see Special Parameters) from the value of the
command_name operand and the positional parameters ($1, $2, and so
on) in sequence from the remaining argument operands. […]
--cut: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html --
[…]
--
FSF associate member #7257 http://sf-day.org/