更新

更新

我是 zsh 用户,但理论上这应该适用于任何 shell。当我编辑我的.zshrc以添加新别名时,我必须source ~/.zshrc在所有打开的终端选项卡/窗口中才能使用新别名。我想知道是否有某种方法可以让我打开的 shell 定期自动获取我的配置文件。

答案1

最复杂且最实时的解决方案是编写一个用户陷阱函数,.zshrc当捕获到陷阱信号时,它会.zshrc自行提供来源。

像这样:

~$ cat .zshrc

trap includerc USR1

includerc() {
   source $HOME/.zshrc
}


alias xxx='df'

在 zsh 中,现在可以看到以下内容:

zshsession> alias
which-command=whence
xxx=df

现在 .zshrc 中发生了一些变化

~$ cat .zshrc

trap includerc USR1

includerc() {
   source $HOME/.zshrc
}


alias xxx='df -g'
alias yyy='someothercommand'

接下来是棘手的部分。使用inotify监视.zshrc或通过监视脚本检查命令的最后修改,.zshrc触发向zsh用户的所有进程发送 USR1 信号。现在我刚刚在另一个 shell 中运行它:

~$ ps -a | awk '$4=="zsh" {print $1}' | xargs kill -SIGUSR1

结果是:

zshsession> alias
which-command=whence
xxx='df -g'
yyy=someothercommand

答案2

如何为经常使用的命令添加别名?

您可能需要针对 zsh 进行以下调整:

myvi() {
    
    vi $1 
    source ~/.zshrc
}

alias vi=myvi

所以当你vi做任何事情时,它都会~/.zshrc

例如,您可以使用 cd 或 ls 执行此操作。

更新

另一个选择是将其构建到您的提示中:

export PS1="\$(source ~\.zshrc)\u@\h:\w\$"

答案3

你完全正确,这个功能可以在任何 shell 中构建,而且自二十五年多以来一直如此。

事实并非如此,从我的角度来看,原因如下。这样的函数可能会导致所有正在运行的 shell 在出现哪怕是最轻微的错误时致命终止。例如:您有一个用于调试的代码部分,其中包含

exit 0

并且在编辑您的 会话期间,.zshrc您删除了保护此退出的代码,以使其成为一般规则。您的所有运行zsh都将结束。您将无法使用相同的用户 ID 启动另一个来修复您的.zshrc。您必须使用另一个sudo已启用的帐户来修复杀手.zshrc

那么最佳做法就是始终.zshrc在新创建的 shell 中测试,以便能够存活。

丢失的功能是非常明智的。

相关内容