这是一个非常有趣的问题,当我在为Linux创建命令行应用程序工具时不小心遇到了它。不幸的是,在许多其他问题的海洋中,SO上的答案太难找到了,因此我决定在SO上再问一个问题,针对那些想要以编程方式修改PATH的人。
这是一个非常有趣的问题,当我在为Linux创建命令行应用程序工具时不小心遇到了它。不幸的是,在许多其他问题的海洋中,SO上的答案太难找到了,因此我决定在SO上再问一个问题,针对那些想要以编程方式修改PATH的人。
Grzegorz Żur的答案对另一个问题做了精彩的阐述。不幸的是,它被埋在许多其他答案中。
有多种方法可以实现。实际解决方案取决于目的。
变量值通常存储在分配列表或在系统或用户会话开始时运行的shell脚本中。在shell脚本的情况下,您必须使用特定的shell语法。
系统范围
/etc/environment
唯一赋值列表。非常适合将系统范围的目录(如/usr/local/something/bin
)添加到PATH
变量或定义JAVA_HOME
。/etc/xprofile
在启动X Window System会话时执行的Shell脚本。适用于登录X Window System的每个用户。这是一个很好的选择,适用于对每个用户有效的PATH
条目,如/usr/local/something/bin
。该文件由其他脚本包含,因此请使用POSIX shell语法而不是用户shell的语法。/etc/profile
和/etc/profile.d/*
Shell脚本。这是只使用shell的系统的不错选择。这些文件仅由shell读取。/etc/<shell>.<shell>rc
。Shell脚本。这是一个糟糕的选择,因为它是单个shell特定的。
此外,/etc/environment
不是脚本文件,而是一系列赋值表达式,每行一个。由于该文件存储了全局语言环境和路径设置,因此它是最常用的选择。
不建议使用/etc/profile
。它只存在于指向/etc/bash.bashrc
并收集来自/etc/profile.d
条目的目的。
用户会话
~/.pam_environment
。独立的变量列表。由PAM在每个用户会话开始时加载,无论是X Window System会话还是shell,但您不能引用其他变量,包括HOME
或PATH
,因此它的用途有限。~/.xprofile
。Shell脚本。当用户登录到X Window System系统时执行该脚本。在这里定义的变量对于每个X应用程序都是可见的。使用它来扩展PATH
的值(例如~/bin
或~/go/bin
)或定义特定于用户的GOPATH
或NPM_HOME
非常合适。该文件由其他脚本包含,因此请使用POSIX shell语法而不是用户shell的语法。您通过快捷方式启动的图形文本编辑器或IDE将看到这些值。~/.profile
。Shell脚本。它仅对从终端或终端模拟器启动的程序可见。对于仅使用shell的系统来说,这是一个不错的选择。~/.<shell>rc
。Shell脚本。这是一个糟糕的选择,因为它只适用于特定的shell。
临时更改:
~$ export PATH=$PATH:~/root/scripts
对于永久性的更改,您可以像这样将此行添加到/etc/environment
文件中:
PATH=$PATH:~/root/scripts