help-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Running commands as "$@"


From: Kerin Millar
Subject: Re: Running commands as "$@"
Date: Thu, 2 Feb 2023 17:37:57 +0000

On Thu, 2 Feb 2023 18:19:57 +0100
alex xmb ratchev <fxmbsw7@gmail.com> wrote:

> On Thu, Feb 2, 2023, 5:19 PM Cristian Zoicas <zoicas@medialab.sissa.it>
> wrote:
> 
> >
> >
> > Davide Brini wrote:
> > > On Thu, 2 Feb 2023 12:11:32 +0100, Cristian Zoicas
> > > <zoicas@medialab.sissa.it> wrote:
> > >
> > >> Now, if a call the script with the commands
> > >>
> > >>       $ sh runner.sh A=B
> > >>
> > >> we get the following errors:
> > >>
> > >>       runner.sh: 10: runner.sh: A=B: not found
> > >>
> > >> Why the shell does not treat the first string in "$@" ('A=B'
> > >> in these cases) as the first possibile token of command (which
> > >> is an assignemnt)?
> > >
> > > It works for me ("sh" points to bash).
> > >
> > >> In addition, the problem is NOT solved by using 'eval "$@"'.
> > >> Apparently it works. For example the command
> > >>
> > >>        $ sh runner.sh A=BCD
> > >>
> > >>    works, but
> > >>
> > >>        $ sh runner.sh A="B    CD"
> > >>
> > >> gives an error. In this case the error (I think) comes
> > >> from the way the expansion of "$@" is performed: eval has to evaluate
> > the
> > >> string "A=B   CD", so it treats A=B as an assignemnt and 'CD' as
> > >> a command.
> > >
> > > This happens because the quotes are removed by the calling shell before
> > eval
> > > has a chance to see them. This works:
> > >
> > > $ sh runner.sh 'A="B    CD"'
> > >
> > > or even, to check
> > >
> > > $ sh runner.sh 'A="B    CD"; echo "$A"'
> > > B    CD
> > >
> > >> I am curios what is going on and if there is any possibility of
> > >> running a command (any command, including an assignment) by using
> > >> a very simple invocation (someting like eval "$@").
> > >
> > > The short answer is: yes, but not where quoting is involved unless you
> > take
> > > special measures to ensure that the relevant quotes are seen by eval.
> > >
> > Correct, but I want to avoid taking these special measures. It is (and it
> > was) clear for
> > me why the script does not work with eval.
> >
> > There was a mistake in my original question and I am extremely sorry for
> > that.
> >
> > I wanted to ask the question for this script
> >
> > # ---- begin script runner.sh ----
> > "$@"
> > # ---- end script runner.sh ----
> >
> 
> this runs external cmds only
> for bash , eval

This is not true.

$ type type
type is a shell builtin
$ set -- type bash
$ "$@"
bash is /usr/bin/bash

-- 
Kerin Millar



reply via email to

[Prev in Thread] Current Thread [Next in Thread]