如何更改 zsh 中的 PATH 变量?

aur*_*rum 7 path-variables zsh oh-my-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
Run Code Online (Sandbox Code Playgroud)

ETC。

我的实际 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
Run Code Online (Sandbox Code Playgroud)

我想删除python3.8所在的目录,它是多余的。

我的问题:

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

Nat*_*e T 10

.zshrc 位于主目录中。开头的点将其隐藏起来。从 ~ 目录中键入 ls -a 即可查看它。要编辑,只需照常运行 vim、nvim 等。

nvim ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

这是 Neovim 的命令。对于您的编辑器,请使用 subnvim以获得正确的命令。

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

export PATH=$PATH:/whatever/you/are/adding
Run Code Online (Sandbox Code Playgroud)

编辑

要删除路径变量:

  • 首先,运行命令:
echo $PATH
Run Code Online (Sandbox Code Playgroud)

从命令行。

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

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

export PATH=<paste-what-you-copied-here>
Run Code Online (Sandbox Code Playgroud)

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

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

最后,请确保文件中只有一处要编辑 PATH。如果有多个,至少可以说结果可能会令人困惑。

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


use*_*428 6

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

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

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

 typeset -aU path
Run Code Online (Sandbox Code Playgroud)

在你的 .zshrc 中;这(由于镜像)也使 PATH 中的条目保持唯一。您可以将此语句放在任何地方,但在第一次分配到PATHor之前,我使用它是为了更容易维护path

由您决定将新条目添加到PATH或 的具体位置path。按照变量中列出的顺序搜索条目。你必须问自己两个问题:

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

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

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