2014-10-16 81 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;的最後一個字符 - 因此產生錯誤。

相關問題