Fixing bash script bogosity - help?
Bert Freudenberg
bert at freudenbergs.de
Tue Apr 28 09:28:15 EDT 2009
On 28.04.2009, at 15:09, pgf at laptop.org wrote:
> bert wrote:
>>
>> On 28.04.2009, at 14:27, pgf at laptop.org wrote:
>>
>>> bert wrote:
>>>>
>>>> On 28.04.2009, at 13:37, Martin Langhoff wrote:
>>>>
>>>>> On Tue, Apr 28, 2009 at 1:19 PM, Ignacio Vazquez-Abrams
>>>>> <ivazqueznet at gmail.com> wrote:
>>>>>> Ah, I see now.
>>>>>>
>>>>>> Try this:
>>>>>>
>>>>>> bash -c 'touch "$@"' "${CMD[@]}"
>>>>>
>>>>> Riiight, that works better... but
>>>>>
>>>>>> Or in the case of the full script:
>>>>>>
>>>>>> bash -c "$ERL"' "$@"' "${ERL_COMMAND[@]}"
>>>>>
>>>>> ...it doesn't work for runuser -- which is the real target.
>>>>> Runuser
>>>>> looks at the added params after -c and tries to parse them. There
>>>>> doesn't seem to be any support for passing parameters.
>>>>>
>>>>> hmmmmm.
>>>>
>>>> Maybe you should use su directly instead of runuser?
>>>
>>> won't that have the same problem? it still wants a command
>>> passed via a -c STRING convention.
>>>
>>> i think this is somewhat intractable, and any time spent on it
>>> would be better spent creating a patch to runuser that lets it
>>> take its command as strace does, or as xterm does with -e, which
>>> avoids the vector->string->vector translations which are the real
>>> issue.
>>
>>
>> No, su passes all arguments after -c to the program you specify.
>
> can you give an example?
>
> $ su root -c /bin/echo one two three
> Password:
>
> $ su root -c '/bin/echo one two three'
> Password:
> one two three
> $
It's not a problem in su but in bash. See "man bash":
-c string If the -c option is present, then commands are read
from
string. If there are arguments after the string, they
are
assigned to the positional parameters, starting with $0.
Note it starts with $0 not $1. So this works:
$ su root -c '/bin/echo "$@"' /bin/echo one two three
- Bert -
More information about the Devel
mailing list