这是我在为Linux创建命令行应用程序工具时偶然发现的一个非常有趣的问题。不幸的是,关于SO的答案是如此隐藏在其他问题的无数答案中,我决定在SO上为那些想要以编程方式修改PATH的人提出另一个问题。
答案 0 :(得分:18)
Grzegorz Żur's answer另一个问题非常出色。不幸的是,它隐藏在许多其他答案中。
有多种方法可以做到这一点。实际的解决方案取决于 目的
变量值通常存储在任务列表中 或者在系统或用户的开头运行的shell脚本 会话。如果是shell脚本,则必须使用特定的shell 语法。
系统范围
/etc/environment
唯一作业列表。非常适合将/usr/local/something/bin
等系统范围的目录添加到PATH
变量或定义JAVA_HOME
。/etc/xprofile
启动X Window System会话时执行Shell脚本。这是为每个登录X Window的用户运行的 系统。对于有效的PATH
条目,它是一个不错的选择 每个用户都像/usr/local/something/bin
。该文件包含在 其他脚本因此使用POSIX shell语法而不是用户的语法 壳。/etc/profile
和/etc/profile.d/*
Shell脚本。对于仅限shell的系统,这是一个不错的选择。这些文件只能由shell读取。- 醇>
/etc/<shell>.<shell>rc
。 Shell脚本。这是一个糟糕的选择,因为它是单壳特定的。
此外,/etc/environment
不是脚本文件,而是由赋值表达式组成,每行一个。由于此文件存储了系统范围的区域设置和路径设置,因此它是大多数引用选项。
使用/etc/profile
不是首选。它的存在仅指向/etc/bash.bashrc
并从/etc/profile.d
用户会话
~/.pam_environment
。唯一任务列表。在每个用户会话开始时由PAM加载,如果它是X,则无关紧要 Window系统会话或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脚本。这是一个糟糕的选择,因为它是单壳特定的。
答案 1 :(得分:3)
暂时改变:
PATH
对于永久更改,您可以在/ etc / environment文件中添加以下行:
~$ export PATH=$PATH:~/root/scripts