在Ubuntu中,PATH变量设置在哪里?

29

这是一个非常有趣的问题,当我在为Linux创建命令行应用程序工具时不小心遇到了它。不幸的是,在许多其他问题的海洋中,SO上的答案太难找到了,因此我决定在SO上再问一个问题,针对那些想要以编程方式修改PATH的人。


也可以在https://dev59.com/8Wgt5IYBdhLWcg3w7BuL?rq=1找到相关编程内容。 - Thilo
8
这不是重复问题。他在问路径设置在哪里,而非如何亲自进行设置。我也想知道同样的答案,因为Ubuntu系统中某些东西会将多个文件夹多次添加到路径中,而这与我无关。幸运的是,该问题的答案提供了我所需的信息(即使它是从重复问题中复制的...<叹气>)。建议:删除重复标记,并重新构思问题名称以使其更清晰明了? - Jason Doucette
2个回答

47

Grzegorz Żur的答案对另一个问题做了精彩的阐述。不幸的是,它被埋在许多其他答案中。

有多种方法可以实现。实际解决方案取决于目的。

变量值通常存储在分配列表或在系统或用户会话开始时运行的shell脚本中。在shell脚本的情况下,您必须使用特定的shell语法。

系统范围

  1. /etc/environment 唯一赋值列表。非常适合将系统范围的目录(如/usr/local/something/bin)添加到PATH变量或定义JAVA_HOME
  2. /etc/xprofile 在启动X Window System会话时执行的Shell脚本。适用于登录X Window System的每个用户。这是一个很好的选择,适用于对每个用户有效的PATH条目,如/usr/local/something/bin。该文件由其他脚本包含,因此请使用POSIX shell语法而不是用户shell的语法。
  3. /etc/profile/etc/profile.d/* Shell脚本。这是只使用shell的系统的不错选择。这些文件仅由shell读取。
  4. /etc/<shell>.<shell>rc。Shell脚本。这是一个糟糕的选择,因为它是单个shell特定的。

此外,/etc/environment不是脚本文件,而是一系列赋值表达式,每行一个。由于该文件存储了全局语言环境和路径设置,因此它是最常用的选择。 不建议使用/etc/profile。它只存在于指向/etc/bash.bashrc并收集来自/etc/profile.d条目的目的。

用户会话

  1. ~/.pam_environment。独立的变量列表。由PAM在每个用户会话开始时加载,无论是X Window System会话还是shell,但您不能引用其他变量,包括HOMEPATH,因此它的用途有限。
  2. ~/.xprofile。Shell脚本。当用户登录到X Window System系统时执行该脚本。在这里定义的变量对于每个X应用程序都是可见的。使用它来扩展PATH的值(例如~/bin~/go/bin)或定义特定于用户的GOPATHNPM_HOME非常合适。该文件由其他脚本包含,因此请使用POSIX shell语法而不是用户shell的语法。您通过快捷方式启动的图形文本编辑器或IDE将看到这些值。
  3. ~/.profile。Shell脚本。它仅对从终端或终端模拟器启动的程序可见。对于仅使用shell的系统来说,这是一个不错的选择。
  4. ~/.<shell>rc。Shell脚本。这是一个糟糕的选择,因为它只适用于特定的shell。

2
你为什么复制并粘贴了一个重复问题的答案? - 123
4
在 Stack Overflow 上大约有一百万个关于这个主题的问题。我提出这个问题是因为它可以快速地帮助开发人员找到完整且信息丰富的答案。 - John Strood
1
你从中获取这个答案的问题更加完整和详尽... - 123
1
然而它仍然是链接的,如果有人需要更多信息。 - SimonC

10

临时更改:

~$ export PATH=$PATH:~/root/scripts

对于永久性的更改,您可以像这样将此行添加到/etc/environment文件中:

PATH=$PATH:~/root/scripts

5
然后执行命令:source /etc/environment。 - andymnc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接