简单的东西
PATH=$PATH:~/opt/bin
要么
PATH=~/opt/bin:$PATH
取决于您是要添加~/opt/bin在末尾(要在所有其他目录之后进行搜索,以防在多个目录中有同名程序),还是要在开头进行添加(要在所有其他目录之前进行搜索)。
您可以同时添加多个条目。PATH=$PATH:~/opt/bin:~/opt/node/bin或订购工作上的变化都很好。不要把它放在export行首,因为它会带来更多的复杂性(请参见下面的“除bash之外的shell注释”下的内容)。
如果您PATH是由许多不同的组件构建的,则最终可能会有重复的条目。请参见如何添加Unix可以通过以下命令发现的主目录路径?并使用awk命令删除重复的$ PATH条目,以避免添加重复项或将其删除。
~/bin顺便说一句,有些发行版会自动将其放入PATH(如果存在)。
放在哪里
将要修改的行放在PATH中~/.profile,或者在其中进行修改~/.bash_profile。
请注意,~/.bash_rc它不会被任何程序读取,并且~/.bashrc是bash交互实例的配置文件。您不应在中定义环境变量~/.bashrc。定义环境变量的正确位置PATH是~/.profile(或(~/.bash_profile如果您不关心bash以外的其他外壳的话))。请参阅它们之间有什么区别,我应该使用哪一个?
不要将其放在/etc/environment或中~/.pam_environment:这些不是shell文件,您不能$PATH在其中使用替换。在这些文件中,您只能覆盖变量,不能将其添加。
一些系统脚本中的潜在并发症
您不需要export变量是否已经在环境中:变量值的任何变化都反映在环境PATH中。¹几乎总是在环境中;所有的Unix系统都非常早地设置了它(实际上通常是在第一个过程中)。
在登录时,您可以依靠PATH已经在环境中并且已经包含一些系统目录。如果要编写的脚本可能会在设置某种虚拟环境时提前执行,则可能需要确保该脚本PATH是非空的并已导出:如果PATH仍未设置,PATH=$PATH:/some/directory则将设置PATH为:/some/directory,而空组件开头表示当前目录(如.:/some/directory)。
if [ -z "${PATH-}" ]; then export PATH=/usr/local/bin:/usr/bin:/bin; fi
关于除bash之外的其他shell的注意事项
在bash和ksh和zsh的,export是特殊的语法,都PATH=~/opt/bin:$PATH和export PATH=~/opt/bin:$PATH连做正确的事。在其他Bourne / POSIX风格的shell中,例如dash(/bin/sh在许多系统上),export被解析为普通命令,这意味着两个区别:
因此,在破折号之类的shell中,export PATH=~/opt/bin:$PATH将其设置PATH为文字字符串,~/opt/bin/:后跟PATH直到第一个空格的值。
PATH=~/opt/bin:$PATH(一个简单的任务)不需要引号,并且做对了。如果要export在可移植脚本中使用,则需要编写export PATH="$HOME/opt/bin:$PATH",或者PATH=~/opt/bin:$PATH; export PATH(或者PATH=$HOME/opt/bin:$PATH; export PATH为了移植到不接受export var=value也没有进行波浪号扩展的Bourne shell )。
¹ 在Bourne外壳中并非如此(就像在实际的Bourne外壳中一样,而不是现代POSIX风格的外壳中),但是如今您不太可能遇到这样的旧外壳。