简单的东西
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风格的外壳中),但是如今您不太可能遇到这样的旧外壳。