可能的重复:
进入目录时执行 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 脚本)。