2013-10-14 44 views
2

好的簡單的bash腳本問題 - 不要笑。 我的劇本只是改變目錄:爲什麼這個腳本沒有改變目錄

echo on; 
echo "running script"; 
CURRENT_DIR=.; 
cd ..; 
pwd; 

我可以看到它改變目錄中的回聲,但是當它完成它,我的終端仍然是在同一目錄下。有小費嗎?

+1

僅供參考在腳本中不需要結尾分號(';')。如果您想在同一行放置多個命令,分號是命令分隔符。 – lurker

+0

不是你的問題,但也許很好知道:「CURRENT_DIR =」。不存儲當前目錄名稱,它只存儲點本身。如果你想存儲當前目錄,例如爲了稍後返回,請執行「CURRENT_DIR = $ PWD」。 –

回答

5

當您運行bash腳本時,它將在其自己的shell中運行。這意味着它有自己的shell環境,包括當前的工作目錄。如果您在腳本中使用cd,那麼該腳本將在新的當前目錄中運行。但是當它完成時,你仍然處於你的用戶級shell所在的當前目錄中,因爲子shell不會觸及它。

如果你想影響當前shell環境,一個辦法是用.執行它:

. my_script 

這就像跑sh my_script但當前用戶shell環境內運行。