我正在使用 zsh 终端,并且正在尝试向 PATH
变量添加一个新条目 (/home/david/pear/bin
)。我在 ~/.zshrc
文件中没有看到对 PATH
变量的引用,但执行 echo $PATH
会返回:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
所以我知道路径变量被设置在某个地方。为 zsh 终端设置/修改的 PATH
变量在哪里?
.zshenv
中操作,而不是在 .zshrc
中...
实际上,使用 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 :
在这里,将此行添加到 .zshrc
:
export PATH=/home/david/pear/bin:$PATH
编辑:这确实有效,但上面的 ony's answer 更好,因为它利用了 ZSH 为 $PATH
等变量提供的结构化接口。这种方法是 bash
的标准方法,但据我所知,当 ZSH 提供更好的替代方案时,没有理由使用它。
PATH="/home/david/pear/bin:/usr/bin:etc"
到 PATH=/home/david/pear/bin:/usr/bin:etc
以使其保留在 zshrc 中。
PATH
,然后当它运行 .zshrc
(或 .bashrc
或其他)时,这就是让您向该路径添加额外内容的原因。
您可以以最小的方式追加到您的 PATH
。除非您附加多个元素,否则不需要括号。它通常也不需要引号。所以简单、简短的追加方法是:
path+=/some/new/bin/dir
这种小写语法将 path
用作 数组,但也会影响其对应的大写伙伴 PATH
(通过 typeset
“绑定”到它)。
(请注意,不需要/不需要 :
作为分隔符。)
常见的交互用法
然后测试新脚本/可执行文件的常见模式变为:
path+=$PWD/.
# or
path+=$PWD/bin
常见配置用法
您可以在 .zshrc
周围添加路径设置(如上),它自然会导致前面列出的设置优先(尽管您可能偶尔仍想使用“前置”表单 path=(/some/new/bin/dir $path)
)。
相关花絮
以这种方式处理 path
(作为数组)还意味着:无需执行 rehash
即可找到新路径的命令。
另请查看将 vared path
作为编辑 path
(和其他内容)的动态方式。
对于这个问题,您可能只对 path
感兴趣,但由于我们讨论的是导出和数组,请注意 arrays generally cannot be exported.
您甚至可以防止 PATH
接收重复条目(请参阅 this 和 this):
typeset -U path
PATH 预填充
您的路径中已经有一些条目的原因是由于您的系统外壳文件为您设置了路径。这在其他几篇文章中有介绍:
为什么以及在哪里设置 $PATH 环境变量?
$PATH 的来源在哪里?我在 .zshrc 中找不到它
path+='my/path' # for fun
。如果你有空格很明显,但如果你有评论就不那么明显了。
path
。 PATH
需要前面的 :
,如下 .zshrc PATH+=:/Users/path/to/my/folder
typeset -aU path
一个班轮,无需打开 ~/.zshrc
文件
echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc
或者
echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc
要查看效果,请在同一标签中执行 source ~/.zshrc
或打开一个新标签
添加路径 ~/.zshrc sudo vi ~/.zshrc 添加新路径 export PATH="$PATH:[NEW_DIRECTORY]/bin" 更新 ~/.zshrc 保存 ~/.zshrc 源 ~/.zshrc 检查 PATH echo $PATH
Bash
方式。
选项 1:将此行添加到 ~/.zshrc:
export "PATH=$HOME/pear/bin:$PATH"
之后,您需要运行 source ~/.zshrc
以使您的更改生效或关闭此窗口并打开一个新窗口
选项 2:在终端控制台内执行它以仅将此路径添加到当前终端窗口会话。当您关闭窗口/会话时,它将丢失。
对我来说 PATH=$PATH:/path/to/file/bin
然后 export PATH
工作。检查 echo $PATH
。其他解决方案正在临时添加路径。
要验证您的新目录是否已正确添加,您可以使用
print -l $path
由于它的类型已知是一个数组
如果您使用的是 macOS(我使用的是 Monterey 12.3.1),那么您可能会像我比喻的那样一直在扯头发。这些说明首先在终端会话中对我有用,但无论我对导出做了什么,我都无法让它持续存在。此外,我在任何地方都找不到 .zshrc 。
事实证明,苹果的做法不同。您需要编辑的文件是 etc/paths
。您可以简单地 sudo nano /etc/paths
并在新行中添加您的路径。然后只需重新启动终端并瞧。
我在 Monterey 12.4 上,我可以更改路径的唯一方法是使用辅助函数。在 nano 中编辑文本文件确实很笨拙
# append
path+=('/foo/bar/yourpath')
# export to sub-processes
export PATH
~/.zshrc
源自.profile
,并覆盖了.profile
中的所有内容。花了一段时间拉我的头发才弄明白。-x
避免显式导出,并在带有-U
的变量中仅保留唯一值,默认情况下假定冒号,因此可以是:typeset -TUx PATH path
path=(...)
(内部不引用$path
或$PATH
)分配、path=(... $path)
前置和path+(...)
附加。