Bash 中是否有一个钩子可以找出 cwd 何时发生变化?
我通常使用 zsh,它提供了 chpwd() 挂钩。也就是说:如果 cwd 被内置的 cd 改变,zsh 会自动调用 chpwd() 方法(如果存在)。这允许设置依赖于 cwd 的变量和别名。
现在我想将 .zshrc 的这一部分移植到 bash,但发现 bash 无法识别 chpwd()。 bash 中是否已经存在类似的功能?我知道重新定义 cd 是可行的(见下文),但我的目标是寻求更优雅的解决方案。
function cd()
{
builtin cd $@
chpwd
}
I am usually using zsh, which provides the chpwd() hook. That is: If the cwd is changed by the cd builtin, zsh automatically calls the method chpwd() if it exists. This allows to set up variables and aliases which depend on the cwd.
Now I want to port this bit of my .zshrc to bash, but found that chpwd() is not recognized by bash. Is a similar functionality already existing in bash? I'm aware that redefining cd works (see below), yet I'm aiming for a more elegant solution.
function cd()
{
builtin cd $@
chpwd
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须使用 DEBUG
trap
或PROMPT_COMMAND
。示例:
请注意,
PROMPT_COMMAND
中定义的函数在每个 提示符之前运行,即使是空提示符也是如此。You would have to use a DEBUG
trap
orPROMPT_COMMAND
.Examples:
Note that the function defined in
PROMPT_COMMAND
is run before each prompt, though, even empty ones.更好的解决方案可能是定义自定义
chpwd
挂钩。与其他现代 shell 相比,Bash 没有设计完整的钩子系统。
PROMPT_COMMAND
变量用作钩子函数,相当于ZSH中的precmd
钩子,Fish中的fish_prompt
。目前,ZSH 是我所知道的唯一一个内置 chpwd 钩子的 shell。chpwd
Bash 中的钩子提供了在 Bash 中设置
chpwd
等效钩子的技巧基于PROMPT_COMMAND
。使用
来源:根据我的要点在 Bash 中创建 chpwd 等效 Hook。
A better solution could be defining a custom
chpwd
hook.There's not a complete hook system designed in Bash when compared with other modern shells.
PROMPT_COMMAND
variable is used as a hook function, which is equivalent toprecmd
hook in ZSH,fish_prompt
in Fish. For the time being, ZSH is the only shell I've known that has achpwd
hook builtin.chpwd
Hook in BashA trick is provided to setup a
chpwd
equivalent hook in Bash based onPROMPT_COMMAND
.Usage
Source: Create chpwd Equivalent Hook in Bash from my gist.