重複の可能性あり:
ディレクトリに入るときにbashスクリプトを実行する
私は特定のツールバージョンを必要とする環境を実行しています。環境を設定するためのコマンドは、次のスクリプトにあります。set_foo_env.sh
ディレクトリがあるとします。ディレクトリに入るとすぐに~/repository/foo/
を実行することは可能ですか?set_foo_env.sh
foo
答え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
}
これは次のことを前提としています:
- は
set_foo_env.sh
単一のディレクトリに固有のものであり、 - これにより、
set_foo_env.sh
既存のシェルの環境が変更されるはずです。
グローバルファイルでパスベースが必要な場合は、manatworkが言及した質問を見てください(ディレクトリに入るときにbashスクリプトを実行する)。