切换到目录时自动运行脚本

bof*_*fin 10 linux bash cd-command environment-variables

可能的重复:
在进入目录时执行 bash 脚本

我正在运行一个需要一些非常具体的工具版本的环境。设置环境的命令位于名为set_foo_env.sh

假设我有一个目录~/repository/foo/set_foo_env.sh一进入foo目录就可以运行吗?

nsg*_*nsg 7

您可以使用 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。

  • 那不应该是“$HOME/repository/foo”或“/home/$USER/repository/foo”吗?尾部斜杠可能是一个问题,至少我的`bash` 设置了没有它的`$PWD`。 (2认同)

Arc*_*ege 6

将其更改cd为一个函数以运行真正的函数cd并在之后运行您的脚本。

cd () {
    if builtin cd ${1:+"$@"} && [ -r ./set_foo_env.sh ]; then
        . ./set_foo_env.sh
    fi
}
Run Code Online (Sandbox Code Playgroud)

这假设:

  1. set_foo_env.sh会是具体到一个单一的目录,
  2. set_foo_env.sh应该会改变现有 shell 的环境。

如果您想要基于路径的全局文件,请查看 manatwork 提到的问题(在进入目录时执行 bash 脚本)。