我是 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 中测试,以便能够存活。
这丢失的功能是非常明智的。