【问题标题】:Adding a new entry to the PATH variable in ZSH在 ZSH 的 PATH 变量中添加新条目
【发布时间】:2012-07-16 19:44:27
【问题描述】:

我正在使用 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

所以PATH 变量被设置在某处。

【问题讨论】:

  • 在我看来,PATH 应该在.zshenv 中操作,而不是在.zshrc...
  • 如果其他人对 @Rmano 关于使用 '.zshenv' 的指针(就像我一样)感到好奇,这里是 link 的详细讨论。

标签: linux ubuntu zsh


【解决方案1】:

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

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

编辑:这确实有效,但下面的ony's answer 更好,因为它利用了ZSH 为$PATH 等变量提供的结构化接口。这种方法是bash 的标准方法,但据我所知,当 ZSH 提供更好的替代方案时,没有理由使用它。

【讨论】:

  • 哈哈算了,我虽然这只是一个控制台命令,但将该行添加到 .zshrc 就可以了。非常感谢!
  • 我的 .zshrc 已经有一行用于导出 PATH,所以我用修改后的行替换了它。
  • 我必须删除条目周围的双引号,即 PATH="/home/david/pear/bin:/usr/bin:etc"PATH=/home/david/pear/bin:/usr/bin:etc 才能保留在 zshrc 中。
  • @taco,你可以使用 $HOME
  • @DanielSpringer:是的。当你打开一个 shell 时,它会从启动它的父进程继承 PATH,然后当它运行 .zshrc(或 .bashrc 或其他)时,这就是让你向该路径添加额外内容的原因。
【解决方案2】:

实际上,使用 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 来源于.profile,并覆盖了.profile 中的所有内容。花了一段时间拉我的头发才弄明白。
  • 追加案例不需要括号,除非您要追加多个元素。它通常也不需要引号。所以简单、简短的追加方法是
  • @SuperUberDuper,你应该明白几乎所有的 unix shell 都只是简单地读取启动文件,这几乎与你以交互方式将其键入 shell 相同。关于“rc”文件,您可能会发现this question 的有趣答案
  • 可以避免使用-x 显式导出,并在带有-U 的变量中只保留唯一值,默认情况下假定冒号,因此可以是:typeset -TUx PATH path
  • @DanielSpringer,没有。如果你想要它,那么:path=(...)(不引用 $path$PATH 内部)分配,path=(... $path) 前置和 path+(...) 追加。
【解决方案3】:

您可以追加到您的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 重复输入 (参考 thisthis):

typeset -U path

【讨论】:

  • 不应该是'path+=:/foo/bar'吗? (带冒号)
  • @andrewlorien 我用关于冒号分隔符的详细信息更新了答案。
  • 请注意,如果路径后面有注释,那么我们确实需要引号,例如path+='my/path' # for fun。如果你有空格很明显,但如果你有 cmets 就不那么明显了。
  • "(请注意,不需要/不需要 : 作为分隔符。)" 这仅适用于小写 pathPATH需要前面的:,如下在.zshrc中PATH+=:/Users/path/to/my/folder
  • 我经常使用exec zsh,因为我使用来自oh-my-zsh 的插件。每次执行时路径都会变大。我应该不时“默认”路径吗?
【解决方案4】:

一个班轮,不打开~/.zshrc文件

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

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

要查看效果,请在同一标签中执行source ~/.zshrc 或打开一个新标签

【讨论】:

  • 在带有 Zsh shell 的 OSX 上完美运行。
  • 工作就像一个魅力!
【解决方案5】:

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

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

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

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

【讨论】:

  • 您能否详细说明此答案与the same answer posted 5 years ago 有何不同?
  • 在这个答案中并不是说你必须将这行代码添加到文件中,如果你只是这样运行它,它只会在当前窗口中改变,这在原始答案
【解决方案6】:
  1. 添加了 ~/.zshrc 的路径

    sudo vi ~/.zshrc

    添加新路径

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

    保存~/.zshrc

    source ~/.zshrc

  3. 检查路径

    echo $PATH

【讨论】:

  • 这是Bash的方式。
  • 行之有效的方法
【解决方案7】:

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

【讨论】:

    【解决方案8】:

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

    print -l $path

    感谢它的类型是一个数组

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2020-01-21
      • 2012-05-21
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多