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