Simon,
Simón,
The shell isn't perfect. ;)
This is a detail that happens to be part of the shell implementation.
Some things could be deref'd like that but variable assignment isn't one
of them.
Let's say I have the following script:
function xyz
{
#this function does something useful
echo "Howdy"
}
var0=ls
var1=xyz
var2="a=6"
$var0 #The command ls will be run
$var1 #function xyz will be run
$var2 #a will not be set to 6
I would suspect it's a security hole if the shell were allowed to
reinterpret variables again.
--R
On Sat, 2008-10-18 at 18:41 -0400, Simón Ruiz wrote:
> On Sat, Oct 18, 2008 at 5:53 PM, Vern Ceder <[EMAIL PROTECTED]> wrote:
> > No, it's evaluating an expression. "x=something" isn't a command, it's an
> > expression. While both "ifconfig" and "x=something" work at the commandline,
> > bash doesn't try to interpret the contents of its variables, so trying to
> > "run" $evalstring will always cause it to look for a command "x=something",
> > if that makes sense.
> >
> > Cheers,
> > Vern
>
> So, a command is an expression, but an expression is not necessarily a
> command?
>
> [EMAIL PROTECTED]:~$ getipcommand="ifconfig eth1 | grep inet\ addr | cut -d :
> -f2 | cut -d \" \" -f1"
> [EMAIL PROTECTED]:~$ eval $getipcommand
> 192.168.2.129
> [EMAIL PROTECTED]:~$ $getipcommand
> |: Unknown host
> ifconfig: `--help' gives usage information.
>
> So my pipeline is EVALuated as I would expect it because it is an
> expression, but when it is expanded by bash when I "run"
> $getipcommand, it is interpreted not as an expression but as a single
> command with everything being an argument to it, including the pipes?
>
> [EMAIL PROTECTED]:~$ ipcom1="ifconfig eth1"
> [EMAIL PROTECTED]:~$ ipcom2="grep inet\ addr"
> [EMAIL PROTECTED]:~$ ipcom3="cut -d : -f2"
> [EMAIL PROTECTED]:~$ ipcom4="cut -d \" \" -f1"
> [EMAIL PROTECTED]:~$ eval $ipcom1 | eval $ipcom2 | eval $ipcom3 | eval $ipcom4
> 192.168.2.129
>
> Ok, so that makes sense, now what about this?:
>
> [EMAIL PROTECTED]:~$ $ipcom1 | $ipcom2
> grep: Trailing backslash
>
> So, it's running the commands, but not piping them right. However, if
> I EVALuate the second one, it's ok.
>
> [EMAIL PROTECTED]:~$ $ipcom1 | eval $ipcom2
> inet addr:192.168.2.129 Bcast:192.168.2.255 Mask:255.255.255.0
>
> So, it seems that in order for piping in to work right, $ipcom2 needs
> to be an expression and not a command?
>
> Simón
>
> _______________________________________________
> Fwlug mailing list
> [email protected]
> http://fortwaynelug.org/mailman/listinfo/fwlug_fortwaynelug.org
_______________________________________________
Fwlug mailing list
[email protected]
http://fortwaynelug.org/mailman/listinfo/fwlug_fortwaynelug.org