如何更改 zsh 中的 PATH 变量?

How can I change PATH variable in zsh?

我想在 zsh 中更改我的 PATH 变量。

问题:我不明白我必须在 .zshrc 文件中的什么地方进行修改。

通常,我会寻找对 PATH 变量的赋值,然后从头开始设置我希望的值(保持所有系统二进制文件目录不变)。

我的 .zshrc 文件的第一行如下:

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

# Path to your oh-my-zsh installation.
export ZSH="/Users/Sam/oh-my-zsh"

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/13/bin

等等

我实际的 PATH 变量是:

/Library/Frameworks/Python.framework/Versions/3.9/bin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Postgres.app/Contents/Versions/13/bin

我要删除python3.8所在的目录,多余

我的问题:

  1. 我是否必须更改 .zshrc 文件中的第 2 行或第 7 行?
  2. 第 2 行被注释掉了...它是否在终端开始时执行?
  3. 我试图注释掉第 7 行。但是 postgres 目录仍然保留在我不理解的 PATH 变量中。

.zshrc 位于主目录中。开头的点使其隐藏。从 ~ 目录中键入 ls -a 以查看它。像往常一样只编辑 运行 vim、nvim 等。

nvim ~/.zshrc

这是 Neovim 的命令。对于您的编辑器,sub nvim 以获得正确的命令。

进入后,您只需添加与从命令行添加的导出命令相同的命令。

export PATH=$PATH:/whatever/you/are/adding

编辑

删除路径变量:

  • 首先,运行命令:
echo $PATH

从命令行。

  • 接下来,将输出复制到剪贴板。

  • 最后,在 .zshrc 文件的最后,添加以下内容:

export PATH=<paste-what-you-copied-here>

因为您没有在 = 之后引用 $PATH,这会将路径设置为您粘贴的内容,不多也不少。在第一个示例中添加 $PATH: 只会将任何内容添加到已经存在的内容的末尾。

由于这使您可以访问路径数组中的每个项目,因此删除只是一个文字问题 highlight/select 以及您想要删除的任何内容。

最后,确保文件中只有一个地方在编辑PATH。如果不止一个,至少可以说结果会令人困惑。

就是说,我相信脚本 运行 是从上到下的,所以只有最后提到的内容应该保留。在某些情况下您可以利用这一点,但为此目的,一个就足够了。 XD

当您决定 fiddle 使用 .zshrc 中的 PATH 时要小心:由于文件由每个交互式子 shell 处理,因此每个子 shell 的 PATH 会变得越来越长,具有相同的多次出现在其中的目录。如果您稍后尝试查找与 PATH 相关的错误,这可能会成为一场噩梦。

由于您使用的是 zsh,您可以利用标量变量 PATH 在数组变量 path 镜像 ,并且您可以要求 zsh 保留数组中的条目是唯一的。

因此,我要做的第一件事就是放一个

 typeset -aU path

在你的 .zshrc 中;这(由于镜像)也使 PATH 中的条目保持唯一。您可以将此语句放在任何地方,但在我第一次分配给 PATHpath.

之前,我有它以便于维护

由您决定向 PATHpath 添加新条目的确切位置。按照变量中列出的顺序搜索条目。你要问自己两个问题:

  • 是否有一些目录位于网络共享上,您有时可能会在其中出现访问延迟(由于网络状况不佳)?这些目录最好显示在路径末尾附近。

  • 您的路径中是否有出现在多个目录中的命令?在这种情况下,路径搜索将始终只找到第一次出现。

最后,不要忘记您的更改将在 zsh 处理文件后看到。因此,您可以在编辑文件后创建一个新的子 shell,或者手动 source .zshrc