當我切換到目錄時自動運行腳本

當我切換到目錄時自動運行腳本

可能的重複:
進入目錄時執行 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
}

這假設:

  1. set_foo_env.sh特定於單一目錄,並且
  2. set_foo_env.sh應該會改變現有的 shell 環境。

如果您想要基於路徑的全域文件,請查看 manatwork 提到的問題(進入目錄時執行 bash 腳本)。

相關內容