可能重複:
Why doesn’t 「cd」 work in a bash shell script?爲什麼光盤反引號行不通
爲什麼在反引號或cd命令$(..)不會改變到新的目錄。任何想法如何在單個命令中執行它,即捕獲任何錯誤和更改目錄。
[[email protected] ~]# pwd
/root
[[email protected] ~]# cmdMsg=`cd /tmp 2>&1`
[[email protected] ~]# pwd
/root
可能重複:
Why doesn’t 「cd」 work in a bash shell script?爲什麼光盤反引號行不通
爲什麼在反引號或cd命令$(..)不會改變到新的目錄。任何想法如何在單個命令中執行它,即捕獲任何錯誤和更改目錄。
[[email protected] ~]# pwd
/root
[[email protected] ~]# cmdMsg=`cd /tmp 2>&1`
[[email protected] ~]# pwd
/root
因爲反引號產生了一個單獨的進程並單獨運行。所以它在該過程中執行cd,但不會更改當前進程的工作目錄。
如果您只需要查看該命令是否成功,你想改變,你可以檢查一下目錄的退出代碼:
cd /tmp
retval = $?
if [ $retval -gt 0 ]; then
echo "cd failed"
fi
因爲你打開運行新程序的環境中它的CD您的CD,嘗試例如:
cmdMsg=`cd /tmp; pwd`
echo $cmdMsg
它會告訴你,你是在/ tmp目錄
獨立的命令與;
如果你想運行這一切都在一個單一的命令。
例如:
cd /; ls; cd ~; ls; cd /var; ls
但在你的情況下,問題是裁談會是在一個新的shell,這不影響你當前的shell中運行。
這與反引號有什麼關係? – Cfreak
子進程無法更改其父進程的環境。
pwd
`cd /tmp 2>&1`
pwd
實際上,你可以在一個步驟中做到這一點,即'如果! cd/tmp;然後回顯「cd失敗」; fi' – doubleDown
@doubleDown - 的確如此。我只是想詳細一點,所以很清楚發生了什麼事情。 – Cfreak