可能的重複:
進入目錄時執行 bash 腳本
我正在運行一個需要一些非常特定的工具版本的環境。設定環境的命令位於名為的腳本中set_foo_env.sh
假設我有一個目錄~/repository/foo/
。set_foo_env.sh
進入目錄就可以運作嗎foo
?
答案1
您可以使用PROMPT_COMMAND,PROMPT_COMMAND中指定的程式碼在bash繪製提示符號之前執行。
# Call function 'foo'
PROMPT_COMMAND=foo
# The function
foo() {
if [[ $PWD == "$HOME/repository/foo" ]]; then
set_foo_env.sh
fi
}
注意,PROMPT_COMMAND 是 bash 特定的,這不是一個有效的方法,因為每次 bash 繪製提示符時都會呼叫函數 foo 。
答案2
將 變更cd
為一個函數來運行真實的函數cd
,然後執行您的腳本。
cd () {
if builtin cd ${1:+"$@"} && [ -r ./set_foo_env.sh ]; then
. ./set_foo_env.sh
fi
}
這假設:
- 將
set_foo_env.sh
特定於單一目錄,並且 - 這
set_foo_env.sh
應該會改變現有的 shell 環境。
如果您想要基於路徑的全域文件,請查看 manatwork 提到的問題(進入目錄時執行 bash 腳本)。