如何将目录添加到PATH?


729

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


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

Answers:


456

使用〜/ .profile设置$ PATH

设置的路径.bash_profile只能在bash登录shell(bash -l)中设置。如果您输入路径,.profile则整个桌面会话都可以使用它。这意味着即使是超能力也将使用它。

例如~/.profile

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

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

注意:

bash作为登录shell不解析.profile如果任一.bash_profile.bash_login存在。来自man bash

它按该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在的且可读的第一个命令中读取并执行命令。

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


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

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

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

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

3
我仍然不知道在哪里添加我的额外路径。我需要将android SDK添加到我的路径中... PATH="$HOME/bin:$PATH"所以我要添加它吗?
Jamie Hutber '16

301

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

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

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

$ source ~/.bashrc

3
您如何“来源”您的.bashrc?您如何“重启终端”?
同构

3
在bash中,它就是'。.bashrc”中
奥迪安

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

21
.bashrc不是设置环境变量的正确位置。他们应该去.profile.pam_environment。参见mywiki.wooledge.org/DotFiles
geirha'3

4
@LaoTzu . .bashrc不是.bashrc:)或source .bashrc关于此事
Znarkus 2012年

120

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

/etc/environment

(这PATH是定义默认值的地方)

这将在台式机或控制台,gnome-terminal或TTY,雨天或晴天下工作;)

  • 要编辑,请按Alt+ F2并键入:

    gksudo gedit /etc/environment
    

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

要执行更改,请运行. /etc/environment。由于该文件只是一个简单的脚本,它将运行并为PATH环境变量分配新路径。要检查运行env并查看PATH清单中的值。

有关:


6
然后您需要重新启动才能使更改生效...
Lee Lee

2
这正是我所需要的。通过vagrant设置一次性虚拟机映像,需要将node和npm添加到路径。
奥斯汀祈祷

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

1
我需要运行source /etc/environment以重新加载更改
JohnnyAW

@JohnnyAW:source等于初始点,请参见例如en.wikipedia.org/wiki/Source_(command)
罗兰·萨拉兹

58

我认为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
    

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

47

对于更熟悉GUI的完全新手(例如我):

  1. 打开$HOME文件夹。
  2. 转到查看显示隐藏的文件或按Ctrl+ H
  3. 右键单击,.profile然后单击“ 使用文本编辑器打开”
  4. 滚动到底部并添加PATH="$PATH:/my/path/foo"
  5. 救。
  6. 注销并重新登录以应用更改(让Ubuntu实际加载.profile)。

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

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

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

1
@Frisbetarian你必须确保添加$PATH:其中包括现有的PATH定义位
岱恩

@dain:您的评论挽救了我的生命!
Py-ser

46

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

https://help.ubuntu.com/community/EnvironmentVariables

参考上面的文档,我通过以下方法设置了我的Android SDK路径工具

  1. ~/.pam_environment在主目录中创建文件。
  2. 内容是PATH DEFAULT=${PATH}:~/android-sdk-linux/tools
  3. 可以通过使用冒号(:)分隔路径来添加其他自定义用户路径。
  4. 这需要重新登录,这意味着您需要注销并重新登录到桌面环境。

1
这是最好的答案。
Paulo Coghi,2015年

26

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

每当您打开终端时,它都会被获取

编辑:基于以下注释,对于将应用于所有外壳程序(包括当您在Unity中打Alt- F2时)的更常规设置,将行添加到~/.profile文件中。但是,可能不应该同时使用这两种方法,因为PATH打开终端后,路径会两次添加到您的环境中。


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

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

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

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

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

15

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

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


14

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

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

根据该线程,Ubuntu的行为似乎与RedHat和克隆的行为略有不同。


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

7
如果有.bashrc,请坚持使用.bashrc。Ubuntu中的GUI终端不是登录外壳,因此.bash_profile将不会运行。

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

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

3
@justingrif不,您不需要.bash_profile。如果bash找不到.bash_profile(当您以交互方式登录时),它将查找.profile并使用它。默认情况下,在Ubuntu 中将有一个.profile.bashrc.profile如果不考虑pam_env,这是设置环境变量的正确位置。
盖尔哈2012年


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

添加在那里

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH

2
sudo nano /etc/profile.d/SCRIPT_NAME.sh对于初学者来说比较容易。
同构

1
对于初学者来说,gksu gedit /etc/profile.d/SCRIPT_NAME.sh更容易。
Fouric 2013年

6

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

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

它仅在大约100%的时间内有效,如果我决定移至/scripts更靠近$HOME文件夹的地方,可以让我自由地在GUI文本编辑器中对其进行快速“全部替换”来进行更改。在6个Ubuntu安装中,我还没有这样做,但是“永远在明天”。小号

百事通


6

推荐的编辑方式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 / environment是适合影响整个系统(而不只是特定用户)的环境变量设置的文件。一种替代方法是在/etc/profile.d目录中为此目的创建一个文件。

/ etc /环境

该文件专门用于系统范围的环境变量设置。它不是脚本文件,而是由赋值表达式组成,每行一个。

注意:变量扩展在/ etc / environment中不起作用。

可以在这里找到更多信息:EnvironmentVariables


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

4

打开终端,输入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"

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


2

将它放到您~/.bashrc使用rc的外壳中(或之前提到的~/.profile)中,~/.xsessionrc这样它也可以在X(外壳外部)中使用。


1

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

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


-1

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

. ~/.bash_profile

然后根据需要编辑.bash_profile。


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

4
这是错误的方式。.profile还是.bash_profile应该出处.bashrc。并非相反。
盖尔哈2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.