help-bash
[Top][All Lists]
Advanced

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

Re: Running commands as "$@"


From: alex xmb ratchev
Subject: Re: Running commands as "$@"
Date: Thu, 2 Feb 2023 18:42:18 +0100

sorry , didnt know / knew wrong

On Thu, Feb 2, 2023, 6:38 PM Kerin Millar <kfm@plushkava.net> wrote:

> 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]