更改腳本中的目錄不會更改目錄 - 為什麼?

更改腳本中的目錄不會更改目錄 - 為什麼?

我見過這個答案自從搜尋這個以來,但最初我寫了這個腳本:

for i in `seq 1 $1`; 
   do cd ../;
done;

它不會更改目錄。為什麼會這樣,運行為

./updir.sh 5

答案1

如您所示執行腳本會在子 shell 中建立複製的環境,而您所做的任何變更(例如設定目錄或環境變數)僅影響此子 shell 環境,而不影響呼叫 shell。

為了從腳本更改目前 shell,您必須使用source.命令在目前 shell 中執行該腳本:

. ./updir.sh 5

您可以使用別名使其自動執行:

alias updir='. ./updir.sh'

或者,您可以使用函數而不是腳本:

updir()
{   for i in `seq 1 $1`; 
       do cd ../;
    done
}

答案2

因為腳本是在子 shell 中運行的,它單獨追蹤當前工作目錄。最簡單的解決方案是使用一個函數:

function updir() {
  for i in $(seq 1 $1); do
    cd ..
  done
}

相關內容