【问题标题】:ZSH always requires to restart terminal in order to access aliasZSH 总是需要重启终端才能访问别名
【发布时间】:2017-09-13 21:47:54
【问题描述】:

我在我的.zshrc 文件中添加了几个别名,它们只有在我重新启动终端或使用source ~/.zshrc 时才能工作如果我只是打开终端,然后输入别名,它不会识别它,直到我调用 @987654323 @

所以我知道我创建的别名没有问题,每次我想使用它们时我只需要加载.zshrc 文件。

发生了什么事?我怎样才能解决这个问题?

【问题讨论】:

    标签: macos terminal alias zsh


    【解决方案1】:

    好吧,您不会期望您只需要编辑一个文件,然后通过魔法让您当前的所有 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,但这比采购手动归档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2016-12-14
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多