GNU Linux 为什么命令"cd xyzdir && rm -rf abcfilename"失败?


$ 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
如果我们

打开跟踪输出(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; - 因此会产生错误。

最新更新