【发布时间】:2017-09-13 21:47:54
【问题描述】:
我在我的.zshrc 文件中添加了几个别名,它们只有在我重新启动终端或使用source ~/.zshrc 时才能工作如果我只是打开终端,然后输入别名,它不会识别它,直到我调用 @987654323 @
所以我知道我创建的别名没有问题,每次我想使用它们时我只需要加载.zshrc 文件。
发生了什么事?我怎样才能解决这个问题?
【问题讨论】:
我在我的.zshrc 文件中添加了几个别名,它们只有在我重新启动终端或使用source ~/.zshrc 时才能工作如果我只是打开终端,然后输入别名,它不会识别它,直到我调用 @987654323 @
所以我知道我创建的别名没有问题,每次我想使用它们时我只需要加载.zshrc 文件。
发生了什么事?我怎样才能解决这个问题?
【问题讨论】:
好吧,您不会期望您只需要编辑一个文件,然后通过魔法让您当前的所有 zsh 实例以某种方式接收更改,对吗?
来自 zsh 手册页,STARTUP/SHUTDOWN FILES 部分:
如果 shell 是交互式的,则从 /etc/zshrc 读取命令,然后从 $ZDOTDIR/.zshrc 读取命令
($ZDOTDIR 默认为您的 $HOME)。因此,如果您在终端中,则有三个选择。其中两个您已经找到(重新启动终端,手动源 .zshrc)。第三种选择是只打开一个 zsh 子外壳(通过输入 zsh)。
实际上,有一个技巧可以在自动读取文件时做一些“魔术”:Zsh 允许您定义一个所谓的 precmd hook,它允许您在将显示命令提示符之前建立要执行的任意命令。您可以使用它来获取您喜欢的任何文件。如果您想使用此功能,我强烈建议反对采购所有 .zshrc。迟早,你会在 .zshrc 中有你不想每次都被执行的东西。
相反,将你的别名定义放到一个单独的文件中,比如 $HOME/.aliases,然后在 Zsh 中定义钩子
function precmd {
source $HOME/.aliases
}
如果您稍后更改 .aliases 文件,您仍然需要在 shell 中键入回车,以引发要写入的新提示和要执行的 precmd,但这比采购手动归档。
【讨论】: