2012-10-23 20 views

回答

3

因爲反引號產生了一個單獨的進程並單獨運行。所以它在該過程中執行cd,但不會更改當前進程的工作目錄。

如果您只需要查看該命令是否成功,你想改變,你可以檢查一下目錄的退出代碼:

cd /tmp 
retval = $? 

if [ $retval -gt 0 ]; then 
    echo "cd failed" 
fi 
+0

實際上,你可以在一個步驟中做到這一點,即'如果! cd/tmp;然後回顯「cd失敗」; fi' – doubleDown

+0

@doubleDown - 的確如此。我只是想詳細一點,所以很清楚發生了什麼事情。 – Cfreak

0

因爲你打開運行新程序的環境中它的CD您的CD,嘗試例如:

cmdMsg=`cd /tmp; pwd` 
echo $cmdMsg 

它會告訴你,你是在/ tmp目錄

0

獨立的命令與;如果你想運行這一切都在一個單一的命令。

例如:

cd /; ls; cd ~; ls; cd /var; ls 

但在你的情況下,問題是裁談會是在一個新的shell,這不影響你當前的shell中運行。

+0

這與反引號有什麼關係? – Cfreak

0

子進程無法更改其父進程的環境。

pwd 
`cd /tmp 2>&1` 
pwd 
  1. 打印在當前進程的工作目錄。
  2. 創建一個新的子進程。
  3. 切換到子進程中的目錄/ tmp(將stderr重定向到stdout時)。
  4. 退出子進程。
  5. 在當前進程中打印工作目錄。
相關問題