如何在zsh中更改PATH变量?

5

我想在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变量中,我不明白为什么。

这个问题最好在SuperUser或Unix&Linux SE上提问。但是我怀疑这个问题已经以几种不同的方式被回答过了。 - Marco Bonelli
你在新会话中检查了 PATH 吗? - KamilCuk
2个回答

9

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

nvim ~/.zshrc

这是Neovim的命令。对于您的编辑器,将nvim替换为适当的命令。
一旦进入,您只需要添加与从命令行添加的相同的导出命令即可。
export PATH=$PATH:/whatever/you/are/adding

编辑

要移除路径变量:

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

从命令行执行。

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

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

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

因为你在等于号之后没有引用$PATH,这将把路径设置为你粘贴的内容,不多也不少。像第一个例子中添加$PATH: 将只是将任何东西添加到已有路径的末尾。
由于这使你可以访问路径数组中的每个项目,所以删除只是选择高亮显示并删除你想要删除的内容。
最后,请确保文件中只有一个地方需要编辑PATH。如果有多个,结果可能会令人困惑。
话虽如此,我相信脚本从上到下运行,因此只有最后一次提及才会持续存在。在某些情况下,您可以利用这一点,但对于此目的,一个就足够了。XD

6
在你决定在.zshrc中调整PATH时要小心:由于文件会被每个交互式子shell处理,因此对于每个子shell,PATH都会变得越来越长,并且相同的目录会出现多次。如果您稍后尝试查找与PATH相关的错误,这可能会成为一场噩梦。
既然您正在使用zsh,您可以利用标量变量PATH在数组变量path中的镜像,以及您可以要求zsh将数组条目保持唯一性。
因此,我会首先放置一个
 typeset -aU path

在你的 .zshrc 文件中,这个语句(由于镜像),使 PATH 条目保持唯一。你可以将此语句放在任何位置,但我将其放在了第一个分配给 PATH 或 path 的语句之前,以便更易于维护。
你可以决定在 PATH 或 path 中添加新条目的位置。变量中列出的顺序是搜索条目的顺序。你需要问自己两个问题:
- 有些目录位于网络共享上,您可能会遇到访问延迟(由于网络条件不佳)吗?那些目录最好在路径末尾显示。 - 您的路径中是否有出现在多个目录中的命令?在这种情况下,路径搜索始终只找到第一个出现。
最后,请注意, zsh 处理文件后才能看到更改。因此,在编辑文件后,您可以创建一个新的子 shell,或手动源化 .zshrc 文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接