2014-10-16 55 views
-1
$ 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 

使用x="cd /tmp; rm -rf abcd"的OTOH正常工作。那么,我的其他方法有什么问题,因为我想确定我在那个目录中? $?总是返回0.gnu linux为什么命令“cd xyzdir && rm -rf abcfilename”失败?

我总是猜想要学。非常感谢。迪内希

$ 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

它失败了,因为你不正确地试图把一个命令放在一个变量中(他们都这样做)。你为什么这样做?你为什么不做'cd/tmp && rm -rf abcd'? – 2014-10-17 00:05:51

+0

我有一个函数可以在每个目录中生成目录和删除候选项列表。所以我执行它在res = $($ cmd) – Dinesh 2014-10-17 00:14:35

+0

行。我用每个文件前面的$ {parameter /#/}前置目录名解决了我目前的问题。但是,它不通知我该目录是否丢失或文件名是否丢失。我仍然很好奇'$($ cmd)'方法究竟出了什么问题。无论如何感谢指针。 – Dinesh 2014-10-17 00:30:54

回答

0

我们的想法,如果我们打开跟踪输出(0>是提示)。

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

我们看到&& rm -rf abcd只是作为额外的参数给cd命令传递。显然,作为命令列表操作符的解析&&只发生在参数扩展之前,不再在$x被替换之后。根据需要

cd . dumb and dumber 

按道理

eval $x 

作品:尝试 - 奇怪的是,cd不抱怨额外的参数。

使用x="cd /tmp; rm -rf abcd"的OTOH正常工作。

你必须在这里弄错。

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

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

相关问题