我刚刚编辑了 .zshrc 文件来配置Z壳在 FreeBSD 上,例如更新小路系统变量。
path+=/usr/local/openjdk12/bin
如何使更改生效?
我必须注销并重新登录吗?有没有办法立即运行该文件?
答案1
重启zsh
Zsh.zshrc
启动时读取。您不需要注销并重新登录。只需关闭终端并打开一个新终端即可.zshrc
在这个新终端中获得新的信息。但你可以让这更直接。只需告诉 zsh 重新启动即可:
exec zsh
如果您在 zsh 提示符下运行此命令,则会将当前的 zsh 实例替换为在同一终端中运行的新实例。新实例具有相同的环境变量与前一个相同,但有新鲜感壳(非导出)变量,并且它开始一个新的历史记录(因此它将在典型配置中混合来自其他终端的命令)。任何后台工作都被拒绝。
重读.zshrc
您还可以告诉 zsh 重新读取.zshrc
.这样做的优点是可以保留 shell 历史记录、shell 变量和后台作业的知识。但根据您在 中放入的内容.zshrc
,这可能有效,也可能无效。.zshrc
如果运行两次,重新读取运行的命令可能不起作用,或者不能很好地起作用。
. ~/.zshrc
.zshrc
如果您希望能够运行两次,您可以做的事情太多了,无法枚举所有可以和不可以放入的内容。这里只是一些常见问题:
- 如果附加到变量(例如
fpath+=(~/.config/zsh)
或chpwd_functions+=(my_chpwd)
),则会再次附加相同的元素,这可能会或可能不会出现问题。 - 如果您定义别名,并且还使用与命令相同的名称,则该命令现在将运行别名。例如,这有效:
但这不会,因为第二次获取文件时,function foo { … } alias foo='foo --common-option'
foo ()
将扩展别名:foo () { … } alias foo='foo --common-option'
- 如果您修补现有的 zsh 函数,那么您现在将修补您自己的版本,这可能会造成混乱。
- 如果您执行“交换两个键的绑定”之类的操作,那么第二次就不会执行您想要的操作。
答案2
对 shell 初始化文件的更改将在下一个您启动的 shell,例如,如果您打开一个新的图形终端或注销并再次登录。如果您所做的更改会以某种方式影响您的桌面环境(我不知道可能是什么类型的更改),则需要注销并再次登录。
你可以. /path/to/filename
使用(在您的情况下)获取文件. ~/.zshrc
或从命令行启动新的 shell 会话zsh
,但这几乎从来都不是一个好主意,因为它可能会产生不必要的后果,例如向变量添加重复路径$PATH
或启动额外的ssh-agent
进程或其他任何内容您可能正在该文件中执行操作。这些更改也不会在已经启动的程序中可见。
对于诸如无条件添加之类的更改$PATH
,您显然可以在当前 shell 中运行添加的命令:
$ path+=/usr/local/openjdk12/bin
这会将目录(在 中zsh
)添加到当前 shell 会话中/usr/local/openjdk12/bin
的末尾(以及中数组$PATH
的末尾)。同样,此更改不会影响已经运行的进程。$path
zsh
$PATH
答案3
您可以获取新文件,这将适用于某些更改,可能包括更新 PATH 变量(取决于其他行)。但是,采购它只会.zshrc
再次运行,并且您可能会执行意外的重复命令。此外,如果旧的中删除了行.zshrc
,那么它们不会从会话中“删除”。
最干净的方法是注销并重新登录。您只需要为终端会话执行此操作,而不是整个桌面环境。