gnu linux为什么命令“cd xyzdir&& rm -rf abcfilename”失败?

时间:2014-10-16 23:59:16

标签: linux command-line

$ touch /tmp/abcd
$ ls -l /tmp/abcd
--w--w--w- 1 dinesh users 0 Oct 16 23:49 /tmp/abcd
$ x="cd /tmp && rm -rf abcd"
$ $x
$ pwd
/tmp
$ ls -l /tmp/abcd
--w--w--w- 1 dinesh users 0 Oct 16 23:49 /tmp/abcd

OTOH使用x="cd /tmp; rm -rf abcd"按预期工作。那么,我的其他方法有什么问题,因为我想确定我在那个目录中? $?始终返回0.

我想总是一个学习的机会。非常感谢。迪内希

$ uname -a
Linux test-host 3.0.93-0.5-default #1 SMP Tue Aug 27 08:17:02 UTC 2013 (925d406) x86_64 x86_64 x86_64 GNU/Linux

1 个答案:

答案 0 :(得分:0)

如果我们打开跟踪输出(0>是提示),我们就会明白。

0>set -x
0>$x
+ cd /tmp '&&' rm -rf abcd

我们看到&& rm -rf abcd只是作为cd命令的额外参数传递。显然,&&作为命令列表运算符的解析仅在参数扩展之前进行,而在$x被替换之后不再进行。奇怪的是,cd并没有抱怨额外的争论 - 试试:

cd . dumb and dumber

逻辑上

eval $x

按需运作。

  

OTOH使用x="cd /tmp; rm -rf abcd"按预期工作。

你必须在这里弄错。

0>$x
+ cd '/tmp;' rm -rf abcd
bash: cd: /tmp;: No such file or directory

就像&&一样,;在这里不被解析为控制操作符,而只是作为目录名/tmp;的最后一个字符 - 因此产生错误。