bof*_*fin 10 linux bash cd-command environment-variables
可能的重复:
在进入目录时执行 bash 脚本
我正在运行一个需要一些非常具体的工具版本的环境。设置环境的命令位于名为set_foo_env.sh
假设我有一个目录~/repository/foo/。set_foo_env.sh一进入foo目录就可以运行吗?
您可以使用 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
}
Run Code Online (Sandbox Code Playgroud)
请注意, PROMPT_COMMAND 是 bash 特定的,这不是一种有效的方法,因为每次 bash 绘制提示时都会调用函数 foo。
将其更改cd为一个函数以运行真正的函数cd并在之后运行您的脚本。
cd () {
if builtin cd ${1:+"$@"} && [ -r ./set_foo_env.sh ]; then
. ./set_foo_env.sh
fi
}
Run Code Online (Sandbox Code Playgroud)
这假设:
set_foo_env.sh会是具体到一个单一的目录,set_foo_env.sh应该会改变现有 shell 的环境。如果您想要基于路径的全局文件,请查看 manatwork 提到的问题(在进入目录时执行 bash 脚本)。