在ZSH中的PATH变量中添加一个新条目

我使用zsh终端,我试图添加一个新条目(/home/david/pear/bin)到PATH变量。我在我的~/.zshrc文件中没有看到对PATH变量的引用,但是执行echo $PATH将返回:

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

所以我知道路径变量是在某处设置的。在哪里为zsh终端设置/修改PATH变量?

528786 次浏览

在这里,将这一行添加到.zshrc:

export PATH=/home/david/pear/bin:$PATH

编辑:这确实有效,但上面的轻装前行的回答更好,因为它利用了ZSH为$PATH这样的变量提供的结构化接口。这种方法是bash的标准,但据我所知,当ZSH提供更好的替代方案时,没有理由使用它。

实际上,使用ZSH允许您使用环境变量的特殊映射。所以你可以简单地做:

# append
path+=('/home/david/pear/bin')
# or prepend
path=('/home/david/pear/bin' $path)
# export to sub-processes (make it inherited by child processes)
export PATH
对我来说,这是一个非常简洁的特征,可以传播到其他变量。 例子:< / p >
typeset -T LD_LIBRARY_PATH ld_library_path :
你可以用最小的方式附加到你的PATH。不需要 括号,除非你要添加多个元素。它还 通常不需要引号。所以简单、简短的追加方法是:

path+=/some/new/bin/dir
这个小写语法使用path作为数组,然而 影响它的大写伙伴对等物PATH(它是 “bound"通过typeset)。< / p >

(注意no :需要/想要作为分隔符。)

常用交互用法

然后测试一个新脚本/可执行文件的常见模式变成:

path+=$PWD/.
# or
path+=$PWD/bin

配置常用用法

你可以在你的.zshrc周围散布路径设置(如上所述),它将自然地导致前面列出的设置优先(尽管你可能偶尔仍然想使用" prependen "表单path=(/some/new/bin/dir $path))。

相关信息

这样处理path(作为数组)也意味着:不需要做a rehash获取要找到的新路径的命令

还可以查看vared path作为编辑path的动态方式 (和其他东西).

你可能只对这个问题的path感兴趣,但是由于 注意,我们讨论的是导出和数组 数组一般不能导出。 < / >强

你甚至可以防止PATH接收重复的条目 (参考 this): < / p >

typeset -U path

路径预填充

您的路径中已经有一些条目的原因是由于您的系统shell文件为您设置了路径。这在其他几篇文章中有涉及:

一行,没有打开~/.zshrc文件

echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc

echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc

要查看效果,在同一个选项卡中执行source ~/.zshrc或打开一个新选项卡

选项1:将这一行添加到~/.zshrc:

export "PATH=$HOME/pear/bin:$PATH"

之后,你需要运行source ~/.zshrc以使你的更改生效,或者关闭这个窗口并打开一个新窗口

选项2:在终端控制台上执行,只将此路径添加到当前终端窗口会话。当您关闭窗口/会话时,它将丢失。

  1. 添加~/.zshrc路径

    sudo vi ~/.zshrc

    添加新路径

    export PATH="$PATH:[NEW_DIRECTORY]/bin"
    
  2. Update ~/.zshrc

    Save ~/.zshrc

    source ~/.zshrc

  3. Check PATH

    echo $PATH

为我PATH=$PATH:/path/to/file/bin 然后export PATH工作。 来检查echo $PATH。其他解决方案是临时添加路径

要验证新目录已正确添加,可以使用

print -l $path

因为它的类型是一个数组

如果你用的是macOS系统(我用的是Monterey 12.3.1),你可能已经像我做的那样拉你的头发了。以上这些指令都在终端会话中为我工作,但无论我使用export做什么,我都无法使它持久。此外,我在任何地方都找不到.zshrc。

事实证明,苹果的做法不同。你需要编辑的文件是etc/paths。你可以简单地sudo nano /etc/paths并在新行中添加路径。然后简单地重新启动终端,瞧。

我在Monterey 12.4上,只有可以改变路径的方式是使用helper函数。在nano中编辑文本文件做了无价值的蹲

# append
path+=('/foo/bar/yourpath')
# export to sub-processes
export PATH