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

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

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


当前回答

PATH=$PATH:/ PATH /to/file/bin 然后导出PATH工作。 查看echo $PATH。其他解决方案是临时添加路径。

其他回答

我在Monterey 12.4上,我可以改变路径的唯一方法是使用helper函数。在nano中编辑文本文件毫无用处

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

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

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

实际上,使用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

对我来说,这是一个非常简洁的特征,可以推广到其他变量。 例子:

typeset -T LD_LIBRARY_PATH ld_library_path :

您可以以最小的方式附加到您的PATH。不需要 括号,除非你要添加多个元素。它还 通常不需要引号。所以简单,简短的追加方法是:

path+=/some/new/bin/dir

这种小写语法使用path作为数组 影响它的大写伙伴等效PATH(它是 “bound”通过排版)。

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

常用交互用法

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

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

配置常用用法

您可以在.zshrc周围添加路径设置(如上所述),这自然会导致前面列出的设置优先(尽管您可能偶尔仍想使用“prepend”形式path=(/some/new/bin/dir $path))。

相关信息

以这种方式处理path(作为数组)也意味着:不需要执行 重新哈希以找到新路径的命令。

还可以看看vared path作为一种动态编辑路径的方法 (和其他事情)。

你可能只对这个问题的路径感兴趣,但是既然 注意,我们讨论的是导出和数组 数组一般不能导出。

您甚至可以防止PATH接收重复的条目 (参考 这 这):

typeset -U path

路径预填充

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

为什么以及在哪里设置$PATH env变量? $PATH的源在哪里?我在.zshrc中找不到它

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

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

编辑:这是可以工作的,但ony上面的答案更好,因为它利用了ZSH为变量提供的结构化接口,如$PATH。这种方法是bash的标准方法,但据我所知,当ZSH提供更好的替代方案时,就没有理由使用它。