ディレクトリに切り替えるときにスクリプトを自動的に実行する

ディレクトリに切り替えるときにスクリプトを自動的に実行する

重複の可能性あり:
ディレクトリに入るときにbashスクリプトを実行する

私は特定のツールバージョンを必要とする環境を実行しています。環境を設定するためのコマンドは、次のスクリプトにあります。set_foo_env.sh

ディレクトリがあるとします。ディレクトリに入るとすぐに~/repository/foo/を実行することは可能ですか?set_foo_env.shfoo

答え1

PROMPT_COMMAND を使用すると、bash がプロンプトを表示する前に PROMPT_COMMAND で指定されたコードが実行されます。

# 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既存のシェルの環境が変更されるはずです。

グローバルファイルでパスベースが必要な場合は、manatworkが言及した質問を見てください(ディレクトリに入るときにbashスクリプトを実行する)。

関連情報