如何在Ubuntu中将目录添加到$PATH并使更改永久生效?

评论

help.ubuntu.com/community/EnvironmentVariables您需要了解所有信息。我发现这里很多输入不正确,或者至少不建议使用该方法。这是一条非常有用的信息,可让您根据执行操作的原因以及在不搞砸一切的情况下准确地执行操作来确定在何处修改环境变量(就像我遵循上述一些错误建议一样)。这么久了,感谢所有的鱼!

#1 楼

使用〜/ .profile设置$ PATH

仅在bash登录外壳程序(.bash_profile)中设置在bash -l中设置的路径。
如果将路径放在.profile中,它将可用到完整的桌面会话。这意味着即使是超能力也将使用它。

例如~/.profile

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi


顺便说一句,您可以通过查看以下内容检查进程的PATH变量:在其环境中的/proc/[pid]/environ中(将[pid]替换为ps axf中的数字)。例如。请使用grep -z "^PATH" /proc/[pid]/environ

注意:

bash作为登录外壳程序无法解析.profile(如果存在.bash_profile.bash_login)。从man bash



顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从第一个命令读取并执行命令
并且可读。


请参见以下答案,以获取有关.pam_environment或交互式非登录shell的.bashrc的信息,或通过以下方式为所有用户全局设置值将脚本放入/etc/profile.d/或使用/etc/X11/Xsession.d/影响显示管理器会话。

评论


太好了,那行得通。我看到如果可以的话它将在哪里自动添加bin目录,所以我只是用它代替了脚本。 TY。

–justingrif
09年7月22日在22:13

在Xbunutu上,不会执行.profile,因此我将其放在.bashrc中,并且可以工作。

– tekumara
2012年8月25日在22:21

这段文档做得很好:有关环境变量的官方文档。考虑阅读它(不是说已更新到规则的最新版本以将值添加到环境变量)。

–米歇尔
13年5月23日在13:38

我们在.profile中的哪里添加路径?

–Vineet Kaushik
2015年10月2日,2:40

我仍然不知道在哪里添加我的额外路径。我需要将android SDK添加到我的路径中... PATH =“ $ HOME / bin:$ PATH”那么我要添加它吗?

–杰米·赫伯(Jamie Hutber)
16 Apr 25 '14:37

#2 楼

在您的主目录中编辑.bashrc并添加以下行:

export PATH="/path/to/dir:$PATH"


您将需要输入.bashrc或注销/登录(或重新启动终端)以进行更改生效。要获取您的.bashrc,只需键入

$ source ~/.bashrc


评论


您如何“获取您的.bashrc”?您如何“重启终端”?

–同构
2011年9月10日,1:16

在bash中,它只是'。 .bashrc'

– phiphidian
2011年9月12日在2:54

我假设您位于主目录中。因为那是您要编辑的.bashrc所在的位置。

– phiphidian
2012-02-16 14:23

.bashrc不是设置环境变量的正确位置。他们应该输入.profile或.pam_environment。参见mywiki.wooledge.org/DotFiles

– Geirha
2012年3月2日,12:21



@LaoTzu。 .bashrc不是.bashrc :)或源.bashrc

– Znarkus
2012年8月21日在8:26

#3 楼

建议在以下位置定义适用于所有用户的系统范围内的永久性环境变量:
/etc/environment

(定义默认PATH的位置)
将在台式机或控制台中工作, gnome-terminal或TTY,有雨或有雨;)


要编辑,请打开终端并输入:
sudoedit /etc/environment

(或在您的计算机中使用sudo打开文件最喜欢的文本编辑器)


要使其工作而无需重新启动,请运行. /etc/environmentsource /etc/environment。由于此文件只是一个简单的脚本,它将运行并将新路径分配给PATH环境变量。要检查运行env并查看清单中的PATH值。
相关:

EnvironmentVariables-社区帮助Wiki


评论


然后您需要重启以使更改生效...

–李
13年11月17日在9:27

这正是我所需要的。通过vagrant设置一次性的vm映像,需要将node和npm添加到路径。

–奥斯汀祈祷
14年6月30日,下午3:07

要使更改生效。 / etc / environement(是,点,空格和/ etc / environment)。由于此文件只是一个简单的脚本,它将运行并为PATH环境变量分配新路径。要检查运行env并在清单中查看PATH值。

–WindRider
15年5月20日在13:27

我需要运行源/ etc / environment重新加载更改

–JohnnyAW
18年5月16日在8:54

@JohnnyAW:来源等效于初始点,请参见例如en.wikipedia.org/wiki/Source_(命令)。

–罗兰·萨拉兹(Roland Sarrazin)
19年1月11日在15:13

#4 楼

我认为在Ubuntu中规范的方式是:



/etc/profile.d/下创建新文件

sudo vi /etc/profile.d/SCRIPT_NAME.sh



添加到其中:

export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"



并授予其执行权限

sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh



/>

评论


通常,将自定义路径添加到PATH的末尾而不是开始的开头更加安全。这样可以避免意外地用您的程序(或其他人的恶意程序)替换系统命令。当其他人在您的系统上工作(或为您提供建议)并且他们从您“替换”的命令中获得意外结果时,这也避免了很多混乱。

–乔
13年2月7日在16:37

#5 楼

对于完全熟悉GUI的完整新手(例如我),请打开您的$HOME文件夹。
转到“查看”→“显示隐藏文件”或按Ctrl +H。
右键单击.profile,然后单击“使用文本编辑器打开”。
滚动到底部并添加PATH="$PATH:/my/path/foo"
保存。
注销并重新登录以应用更改(实际上是Ubuntu)加载.profile)。


评论


不再建议编辑.profile文件。您仍然可以使用此方法来编辑.pam_environment文件,请参阅:help.ubuntu.com/community/EnvironmentVariables

–PulsarBlow
13年5月19日下午4:20

感谢@PulsarBlow!我不太确定到底有什么区别和好处。这是指向相关部分的直接URL:help.ubuntu.com/community/…

–戴恩
13年5月20日在12:22

由于所有路径均被覆盖,此答案导致我的系统停止登录。使用Ubuntu 16.04。

–弗里贝斯坦人
17 Mar 2 '17 at 11:27



@Frisbetarian,您必须确保添加$ PATH:该位包括现有的PATH定义

–戴恩
17 Mar 10 '17 at 5:07

home文件夹不是指一个名为home的文件夹,而是在终端中键入“ cd〜”时进入的文件夹

–似乎
19 Mar 26 '19在7:13

#6 楼

对于仅特定用户可用的持久性环境变量。我强烈建议使用Ubuntu官方文档。作者:


在主目录中创建~/.pam_environment文件。
内容为PATH DEFAULT=${PATH}:~/android-sdk-linux/tools。 )。
这需要重新登录,这意味着您需要注销并重新登录到桌面环境。


#7 楼

将该行放入您的~/.bashrc文件中。

每当您打开终端时该源就会被源出

编辑:根据以下评论,对于更通用的设置将适用于所有外壳程序(包括当您在Unity中按Alt-F2时),请将该行添加到您的~/.profile文件中。但是,可能不应该同时执行这两项操作,因为如果打开终端,该路径将两次添加到PATH环境中。

评论


实际上,我认为您可以在$ HOME / .profile中为个人设置或在/ etc / profile中为所有用户设置路径。但是,如果只需要bash,我想两者都会起作用。

–马蒂·弗里德
2012年7月31日在1:37

如果在〜/ .bashrc中进行设置,则仅在打开的终端中可用。例如。如果您按Alt + F2并尝试从该目录运行命令,则找不到该命令。如果在〜/ .profile或〜/ .pam_environment中设置它,则gnome会话(或您使用的任何DE)都将继承它。在〜/ .bashrc中附加PATH的另一个缺点是,如果您从另一个交互式bash shell中以交互方式打开/执行bash,它将被附加多次。

– Geirha
2012年7月31日4:58



我已经有一段时间没有真正研究过这个了,所以我进行了搜索,似乎至少有95种不同的方式来设置路径,这里将讨论其中的大多数方式。我从来没有想过哪个最好。我认为〜/ .profile对于个人路径是正确的;那就是Ubuntu添加〜/ bin目录的地方。我承认,我稍微夸大了一些方法-只是一些。

–马蒂·弗里德
2012年7月31日下午5:02

@MartyFried是的,在freenode上的#bash中引用该机器人:«Internet上绝大多数的bash脚本,代码,教程和指南都是垃圾。 urge鱼是个乐观主义者。»使用google解决bash问题,在找到好的解决方案之前,您经常会发现很多半解决方案。哦,在这种情况下,我也会使用〜/ .profile。

– Geirha
2012年7月31日5:14



@geirha-我同意,互联网上的大多数指南通常都是胡扯,尤其是任何Linux,因为不同的发行版甚至同一版本的不同版本的处理方式都不同。通常归结为有效的方法,但是大多数人没有意识到,有效的方法只是有效的方法,不一定是正确的方法,甚至永远有效的方法。我尝试找出许多方法中哪一种是正确的,因为我讨厌做某事不止一次-但是这并不总是那么容易。 :)

–马蒂·弗里德
2012年7月31日18:50

#8 楼

要将其设置为系统范围,请将export PATH=/path/you're/adding:$PATH行添加到/etc/profile的末尾。

要仅为登录用户添加目录,请将同一行添加到~/.bash_profile

#9 楼

将其添加到.bashrc可以正常工作,但我认为设置路径变量的更传统方法是在.bash_profile中添加以下几行。

PATH=$PATH:/my/path/foo
export PATH


线程看起来好像Ubuntu的行为与RedHat和克隆略有不同。

评论


我没有.bash_profile,我应该创建它吗?

–justingrif
09年7月22日在21:39

如果您使用.bashrc,请将其粘贴在.bashrc中。 Ubuntu中的GUI终端不是登录Shell,因此不会运行.bash_profile。

–koenigdmj
09年7月22日在21:58

我没有运行gui shell。但是从上面的线程看来,.bashrc可以正常工作。

–justingrif
09年7月22日在22:05

如果您的外壳程序是登录外壳程序,那么两者都将起作用。但是我只是在我的一台Ubuntu计算机上尝试了.bash_profile方法,即使重新启动gnome会话后,它也没有提供我的.bash_profile。因此,我想说的是,将其放在.bashrc中可能是Ubuntu使用的方法。

– 3dinfluence
09年7月23日在2:30

@justingrif不,您不需要.bash_profile。如果bash找不到.bash_profile(以交互方式登录时),它将查找.profile并改用它。默认情况下,在Ubuntu中将有一个.profile和.bashrc。如果忽略pam_env,.profile是设置环境变量的正确位置。

– Geirha
2012年3月2日,12:19



#10 楼

在终端中,从cdthe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):${PATH}" >> ~/.bashrc


这不是我的主意。我在这里的此博客中找到了这种导出路径的方法。

评论


如何正确添加路径到PATH?说:“您不应该在〜/ .bashrc中定义环境变量。”

– Peter Mortensen
19/12/5在23:11

#11 楼

sudo vi /etc/profile.d/SCRIPT_NAME.sh


在此添加

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH


评论


sudo nano /etc/profile.d/SCRIPT_NAME.sh对于初学者来说更容易。

–同构
2011-09-10 1:22

对于初学者来说,gksu gedit /etc/profile.d/SCRIPT_NAME.sh甚至更容易。

– Fouric
13 Mar 26 '13 at 0:04

#12 楼

每当我“安装”我的BASH脚本文件夹时,我都会按照测试模式对最新版本的Ubuntu中大多数.profile文件中的$HOME/bin文件夹进行测试。我设置了一个看起来像

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi


的测试,它大约100%的时间都可以工作,并且让我可以在GUI文本编辑器中快速进行“全部替换”,如果我决定将/scripts移到更靠近我的$HOME文件夹的位置。在6个Ubuntu安装中,我还没有这样做,但是“永远在明天”。 S

BZT

#13 楼

推荐的PATH编辑方法来自/etc/environment文件
/etc/environment的示例输出:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

例如,添加/home/username/mydir的新路径
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"

然后,重新启动PC。


系统范围的环境变量
/ etc是一个适合环境变量设置的文件,该文件会影响整个系统(而不仅仅是特定用户)。 /环境。一种替代方法是在/etc/profile.d目录中为此目的创建文件。
/ etc / environment
该文件专门用于系统范围的环境变量设置。它不是脚本文件,而是由赋值表达式组成,每行一个。
注意:变量扩展在/ etc / environment中不起作用。

更多信息可以在这里找到:环境变量

评论


最低的答案,但最正确的。该文件通常使用路径自动填充到bin Ubuntu中。

– NotoriousPyro
17-10-12在13:33



#14 楼

打开终端,输入gedit .profile并插入以下内容:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$PATH:$HOME/bin"
fi

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"


关闭并打开终端,它应该可以工作。

#15 楼

将其放到您的~/.bashrc或您使用rc的任何外壳(或前面提到的~/.profile)和~/.xsessionrc上,以便它也可以在X(外壳)中使用。

评论


如何正确添加路径到PATH?说:“您不应该在〜/ .bashrc中定义环境变量。”

– Peter Mortensen
19/12/5在23:10

#16 楼

即使系统脚本不使用此代码,
在任何情况下,如果要向PATH环境变量添加路径(例如$HOME/bin),也应该使用

PATH="${PATH:+${PATH}:}$HOME/bin"


用于附加(而不是PATH="$PATH:$HOME/bin"),


PATH="$HOME/bin${PATH:+:${PATH}}"


用于附加(而不是PATH="$HOME/bin:$PATH")。

这样可以避免在$PATH最初为空时产生虚假的前导/尾部冒号,这可能会产生不良影响。

参见例如https://unix.stackexchange.com/questions/162891/append-to-path-like-variable-without-creating-leading-colon-if-unset

#17 楼

对于Ubuntu,请编辑~/.bashrc并添加以下行。

. ~/.bash_profile

,然后根据需要编辑.bash_profile .....

评论


投反对票的原因是您没有说明如何“根据需要编辑.bash_profile”。我到底需要对.bash_profile做些什么?

–同构
2011年9月10日,1:17

这是错误的方式。 .profile或.bash_profile应该是.bashrc的来源。并非相反。

– Geirha
2012年3月2日,12:15

如何正确添加路径到PATH?说:“您不应该在〜/ .bashrc中定义环境变量。”

– Peter Mortensen
19/12/5在23:08