在ZSH中将新条目添加到PATH变量中


185

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

因此,在PATH某处设置了变量。

Answers:


206

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

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

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


29
哈哈,算了,我虽然那只是一个控制台命令,但是把那行加到.zshrc上就可以了。非常感谢!
大卫·巴雷托

1
我的.zshrc已经有一行用于导出PATH,所以我用修改后的一行替换了它。
扎克·休斯顿

5
我不得不删除围绕条目的双引号,即PATH="/home/david/pear/bin:/usr/bin:etc"PATH=/home/david/pear/bin:/usr/bin:etc为它留在zshrc。
a7omiton 2015年

3
@taco,您可以使用$ HOME
mencargo,2015年

1
@DanielSpringer:是的。当您打开外壳PATH程序时,它会从启动它的父进程中继承,然后在它运行.zshrc.bashrc或执行其他操作)时,您可以在该路径中添加其他内容。
Linuxios

214

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

16
好答案。在我的情况下,~/.zshrc是来源.profile,然后覆盖中的所有内容.profile。花了一段时间拉扯我的头发弄清楚。
汗阮2014年

1
除非您要追加多个元素,否则追加情况不需要括号。它通常也不需要引号。因此,添加的简单,简短方法是
Micah Elliott

1
@SuperUberDuper,您应该了解几乎所有的UNIX shell都只是读取启动文件,其作用几乎与您以交互方式将其键入到shell中的方式相同。关于“ rc”文件,您可能会找到对此问题的
2013年

5
可以避免使用显式导出,-x而在变量中仅保留唯一值,-U默认情况下假定冒号,因此可以是:typeset -TUx PATH path
Grief

2
@DanielSpringer,不。如果您希望使用这些术语,则:(path=(...)无引用$path$PATH内部)分配,添加path=(... $path)path+(...)追加。
ONY

38

您可以以PATH最小的方式附加到您的内容上。除非要附加多个元素,否则不需要括号。它通常也不需要引号。因此,添加的简单,简短方法是:

path+=/some/new/bin/dir

常用用法

然后,用于测试新脚本/可执行文件的通用模式变为:

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

这种小写语法path用作数组,但也会影响其大写伙伴等效项PATH(通过绑定到该伙伴typeset)。

(注意,没有:需要/希望作为隔板。)

相关花絮

path这种方式(作为数组)对待也意味着:无需执行a rehash即可找到新路径的命令。

还要看一下vared path作为动态编辑path 和其他方式的方式

您可能只path对这个问题感兴趣,但是由于我们在谈论导出和数组,因此请注意, 数组通常无法导出。

您甚至可以防止PATH重复输入 (请参考 thisthis):

typeset -U path

应该不是'path + =:/ foo / bar'吗?(带有冒号)
安德鲁·洛里安(Andrew lorien

1
@andrewlorien我用有关冒号分隔符的详细信息更新了答案。
米卡·艾略特

请注意,如果路径后有注释,那么我们确实需要引号,例如path+='my/path' # for fun。如果有空格,则很明显,但如果有注释,则不会太多。
富兰克林于

“(注意,不需要/用作分隔符。)”仅对小写字母为true path。甲前述:需要PATH,如在.zshrc如下 PATH+=:/Users/path/to/my/folder
埃米特R.

36

一根衬纸,不打开~/.zshrc文件

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

要么

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

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


1
在具有Zsh shell的OSX上完美地工作。
斯特赖克

1
像魅力一样工作!
Akbar Sha Ebrahim

14
  1. 添加了〜/ .zshrc的路径

    sudo vi ~/.zshrc

    添加新路径

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

    保存〜/ .zshrc

    source ~/.zshrc

  3. 检查路径

    echo $PATH


2
就是Bash这样
CousinCocaine

13

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

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

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

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


您能否详细说明此答案与5年前发布的相同答案有何不同?
富兰克林于

在这个答案中,并不是说您必须将这一行代码添加到文件中,如果您只是像这样运行它,它将仅在当前窗口中更改,而这在原始答案中没有解释
Dimitar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.