我试图在目录中添加一个目录,以便该目录始终位于我的Linux路径中。我已经尝试过:

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


这可行,但是每次我退出终端并启动新的终端实例时,该路径都会丢失,因此我需要运行再次导出命令。

我该怎么做,以便将其永久设置?

#1 楼

有多种方法可以做到这一点。实际的解决方案取决于目的。

变量值通常存储在分配列表或在系统或用户会话开始时运行的Shell脚本中。如果使用Shell脚本,则必须使用特定的Shell语法和exportset命令。

系统范围内的




/etc/environment唯一分配的列表,允许引用。非常适合将系统范围的目录(例如/usr/local/something/bin)添加到PATH变量或定义JAVA_HOME。由PAM和SystemD使用。

/etc/environment.d/*.conf唯一分配的列表,允许引用。非常适合将系统范围的目录(例如/usr/local/something/bin)添加到PATH变量或定义JAVA_HOME。可以将配置分为多个文件,通常每个工具(Java,Go,NodeJS)每个文件一个。由SystemD使用,在设计上不会将这些值传递给用户登录Shell。

/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的。在非登录模式下使用。

用户会话



~/.pam_environment。唯一作业列表,不允许引用。如果是X Window系统会话或shell,则在每个用户会话开始时由PAM加载。您不能引用其他变量,包括HOMEPATH,因此用途有限。由PAM使用。

~/.xprofile Shell脚本。当用户登录到X Window System系统时执行。此处定义的变量对每个X应用程序都是可见的。用PATH~/bin之类的值扩展~/go/bin或定义用户特定的GOPATHNPM_HOME的完美选择。该文件包含在其他脚本中,因此请使用POSIX Shell语法而不是用户Shell的语法。通过快捷方式启动的图形文本编辑器或IDE将看到这些值。

~/.profile~/.<shell>_profile~/.<shell>_login Shell脚本。仅对从终端或终端仿真器启动的程序可见。对于仅使用shell的系统来说,这是一个不错的选择。由shell在登录模式下使用。

~/.<shell>rc。 Shell脚本。这是一个糟糕的选择,因为它是特定于单个shell的。 Shell在非登录模式下使用。

注意事项

Wayland上的Gnome启动用户登录Shell来获取环境。它有效地使用了登录shell配置~/.profile~/.<shell>_profile~/.<shell>_login文件。

手册


环境
environment.d
bash
dash

特定于发行版的文档


Ubuntu
archlinux

相关

之间的区别登录外壳程序和非登录外壳程序?

评论


谢谢您的详细回答,这个应该更高。也许也应该将.bash_profile添加到列表中?

–James Ko
16年11月11日在23:12

@JamesKo那是第4名

–trve.fa7ad
16年11月14日下午4:11

我认为最好的答案是建议/ etc / environment。但是我可以在不注销和登录的情况下刷新它吗?有时我不使用bash或sh,因此/ etc / environment源不起作用。

–banan3'14
18年4月8日在20:22



很好,我认为是最完整的答案。应该更高。

– Peter Gloor
18年6月13日在18:23

我搜索该主题的原因实际上是Go。很高兴看到我不是唯一意识到.bashrc不是正确的地方的人。 ;)

– Peter Gloor
18年6月13日在18:34

#2 楼

您需要将其添加到您的~/.profile~/.bashrc文件中。

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


根据您的工作,您可能还需要符号链接到二进制文件:

cd /usr/bin
sudo ln -s /path/to/binary binary-name


>请注意,这不会在会话的剩余时间内自动更新您的路径。为此,您应该运行:

source ~/.profile 
or
source ~/.bashrc


评论


有几个问题。 1)在$ PATH和/ usr / bin之间不应该有一个冒号。 2)/ usr / bin甚至应该在那里。 3)您不应该使用/ usr / local / bin吗?

–...
2014年1月11日,0:16



请注意:在bash PATH的末尾留下冒号通常被认为是一个安全漏洞,因为这样做可以使bash在找不到所需可执行文件的情况下在当前目录中查找。查找此帖子以寻求更多信息的用户应被告知此信息。

–erewok
2014年1月14日,0:16

@AdamRobertson这是不安全的-考虑以下情况:解压缩tarball,然后将cd放入解压缩的目录,然后运行ls ---然后意识到tarball中有一个名为ls的恶意程序。

–钟莉莉
2014-2-27在0:39

对我而言,它是.bash_profile,而不是.profile。似乎每个人都不一样。

–唐吉x德
2014年4月9日在1:08

我认为我大大提高了此答案的质量,并解决了其他用户提出的一些问题。每个路径导出或每个调整路径的命令都应始终确保使用冒号分隔现有路径。切勿使用前导或结尾的冒号,并且当前目录也绝不能位于路径中。

–埃里克·罗伯逊(Erick Robertson)
2014年9月4日17:43



#3 楼

在Ubuntu中,编辑/etc/environment。其唯一目的是存储环境变量。原来$ PATH变量是在这里定义的。
这是我的/etc/environment文件中的粘贴内容:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"


所以您可以以root身份打开该文件,然后添加所需的任何内容。

要立即获得结果,
运行(以普通用户和root身份尝试):

source /etc/environment && export PATH


更新:

如果使用zsh(又名Z Shell),请在/etc/zsh/zshenv中的注释后添加此行:

source /etc/environment


我遇到了这个小问题在Ubuntu 15.10上,但是如果您的zsh没有获得正确的PATH,这可能就是为什么

评论


并非所有系统都具有/ etc / environment

–user3439968
2014年11月14日17:20

FWIW $ PATH也在Arch Linux中的/ etc / profile中定义。

– Sparhawk
2015年2月24日,下午1:57

@ e-sushi我实际上对此感到震惊。我本人正在使用ubuntu 14.04.1。我可以保证您文件是内置的。

–trve.fa7ad
15年2月28日在12:18

在阳光下但在/ etc / environment下尝试了所有建议,并让所有建议均无效之后,我终于迷失了方向。我也在Ubuntu 14.04上,这是重启后实际上唯一更改PATH变量的一个。

– ock猴
15年3月24日在16:21

用户在更新环境文件后应重新启动PC。

– Harish_N
16 Mar 24 '16 at 17:50

#4 楼

export声明放在~/.bashrc中。我的.bashrc包含以下内容:

export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH


评论


需要重启吗?

–单击升级
13年2月1日于1:01

当我将其放在.profile中时起作用,没有找到.bashrc

–单击升级
13年2月1日于1:10

它可能取决于确切的系统;我不确定确切的条件决定执行哪个文件。很高兴,问题解决了。

– ashastral
13年2月1日于2:10

@Click Upvote您需要执行〜/ .bashrc源来重新加载.bashrc配置。这样就可以了

–BigSack
2014年4月6日在6:02



仅当PATH尚未标记为环境变量时才需要export关键字-几乎无条件地将其标记为环境变量。只是PATH = / var / lib / gems / 1.8 / bin:/home/fraxtil/.bin:$ PATH将具有相同的效果。

–查尔斯·达菲(Charles Duffy)
2014年10月4日17:20



#5 楼

您可以通过两种方法永久设置$PATH



要设置特定用户的路径:
您可能需要在主目录的.bash_profile中进行输入用户。

例如,在我的情况下,我将在tomcat用户配置文件中设置Java路径

[tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile



为ALL设置通用路径系统用户,可能需要这样设置路径:

[root~]# echo "export PATH=$PATH:/path/to/dir" >> /etc/profile




评论


发行版上是否有名为的/ etc / profiles文件?我的没有。我想你有错字。

–克里斯·约翰逊(Chris Johnson)
2014年10月16日13:36

您可能想转义要写入配置文件的$。例如echo“ export PATH = \ $ PATH:/ path / to / dir” >> / etc / profile,这样,您实际上在脚本运行时将其追加到变量上,而不是根据当时的值将其设置为文字值执行此初始命令。

– BuvinJ
16年1月20日在15:12

#6 楼

您可以在Centos或RHEL上为本地用户使用:

echo $"export PATH=$PATH:$(pwd)" >> ~/.bash_profile


这会将当前目录添加到PATH中(或者您可以使用其他目录),这使它成为永久性的,但是在下一次用户登录时生效。

如果您不想重新登录,则可以使用:

source ~/.bash_profile


重新加载# User specific environment and startup programs,此评论出现在.bash_profile

#7 楼

您还可以永久设置,编辑以下文件之一:

/etc/profile(对于所有用户)

~/.bash_profile(对于当前用户)

~/.bash_login(对于当前用户)

~/.profile(对于当前用户)

您还可以使用/etc/environment设置永久的PATH环境变量,但它不支持变量扩展。

摘自:http://www.sysadmit.com/2016/06/linux-anadir-ruta-al-path.html

#8 楼

昨天,我在寻找一种将包含我自己的脚本的文件夹添加到PATH的方法时偶然发现了这个问题-很惊讶地发现我自己的~/.profile文件(在Linux Mint 18.1上)已经包含此文件:

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


因此,我要做的就是创建文件夹~/bin并将我的脚本放在这里。

#9 楼

我认为最优雅的方法是:

1.在〜/ .bashrc文件中添加此文件
运行此命令


gedit〜/ .bashrc


在其中添加路径


export PATH = $ PATH:/ opt / node / bin


2.source〜/ .bashrc
(Ubuntu)

#10 楼

1.修改“ / etc / profile”文件。

#vi /etc/profile


按“ i”键进入编辑状态并将光标移到文件末尾,其他条目:

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


按“ Esc”键退出编辑状态,':wq'保存文件。

2.使配置生效

source /etc/profile


说明:
配置文件适用于所有用户,如果只想对活动用户有效,请设置“ .bashrc”文件

#11 楼

您可以将该行添加到控制台配置文件(例如.bashrc)或.profile

评论


我在/ home /(用户名)中都没有这些文件

–单击升级
13年2月1日于1:03

@ClickUpvote:您使用什么外壳? (并且以点开头的文件被隐藏,您需要使用ls -a之类的文件才能看到它们。)

– David Schwartz
13年2月1日于1:05



如果您没有任何这些文件(bashrc或配置文件),则可以手动创建它们,它们将被自动使用

–trve.fa7ad
2014年9月7日在1:20

#12 楼

添加到/etc/profile.d文件夹脚本[name_of_script].sh中,行:export PATH=$PATH:/dir/etc/profile.d文件夹中的每个脚本在登录时由/etc/profile自动执行。

评论


建议如何自定义环境的方法

– Iurii Vasylenko
2015年4月10日在12:14

仅当您希望设置在系统范围内使用时,这可能不是最常见的用例。大多数人希望(或应该希望)在本地设置路径,因为大多数用户/角色执行的是上下文不同的操作,并且所做的假设越少越好。

–强大
2015年4月10日在20:25

@mpowered,是的,这仅适用于系统范围。如果要在本地更改PATH,则应在〜/ .profile或〜/ .bashrc中添加相同的导出。在这里,您应该考虑将登录shell读为〜/ .profile,将交互式shell读为〜/ .bashrc。这非常重要,因为例如ssh不会登录,因此〜/ .profile将不会被读取。 / etc / profile中的suse源〜/ .bashrc等几种发行方式。但这并不是所有Linux都常见的

– Iurii Vasylenko
15年4月15日在9:49

如果您引用的是可执行脚本/应用程序,请不要忘记获取[name_of_script] .sh源,以使这些应用程序在当前shell中立即可用

–奥宾万内山
11月18日14:12

#13 楼

经过大量研究后,我受到以下链接的启发,找到了一个简单的解决方案(我正在使用基本操作系统)。


运行以下命令以编辑方式打开.bashrc文件。 [您
也可以使用vi或任何其他编辑器]。

~$ sudo nano ~/.bashrc


在文件末尾添加以下行并保存。

export PATH="[FLUTTER_SDK_PATH]/flutter/bin:$PATH"


例如:

export PATH="/home/rageshl/dev/flutter/bin:$PATH"





我相信这是在Ubuntu发行版中为波动设置路径的永久性解决方案

希望这会有所帮助。

#14 楼

添加export命令的文件取决于您是登录模式还是非登录模式。

如果您处于登录模式,则要查找的文件是/ etc / bash或/etc/bash.bashrc

,如果您处于非登录方式,则正在查找文件/.profile或目录/.profiles.d

上述文件(如果系统变量在哪里)。

#15 楼

永久添加PATH变量

全局:

echo "export PATH=$PATH:/new/path/variable" >> /etc/profile


本地(仅供用户使用):

echo "export PATH=$PATH:/new/path/variable" >> ~/.profile


用于全局重启。对于本地重新登录。

示例

之前:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin


之后:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable


或者,您也可以只编辑配置文件:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable


另一种方式(感谢gniourf_gniourf):

echo 'PATH=$PATH:/new/path/variable' >> /etc/profile



您不应该在这里使用双引号! echo'export
PATH = $ PATH:/ new / path / variable'...顺便说一句,export关键字
很无用,因为PATH变量很可能已经
标记为已导出。 – gniourf_gniourf


评论


不。您不应该在这里使用双引号! echo'export PATH = $ PATH:/ new / path / variable'...顺便说一句,export关键字很有可能是无用的,因为PATH变量很可能已被标记为已导出。

– gniourf_gniourf
2014年11月14日17:48



不,您应该使用双引号,因为单引号中的$ PATH不能插值。而且BTW导出也很有用。

–user3439968
2014年11月14日17:58

我知道了。您可以使用双引号或单引号,因为$ PATH在执行echo时插值或在/ etc / profile执行时插值。

–user3439968
2014年11月14日在18:14

@ user3439968实际上,如果要从多个文件追加到$ PATH,双引号会引起很多问题。考虑:当您使用双引号时,$ PATH将被转换为带有所有先前定义的PATH目录的静态字符串。说您使用〜/ .bashrc将/ usr / local附加到它。现在,如果您打算使用/etc/bash.bashrc将/ opt / bin附加到相同的变量; $ PATH将转换为相同的静态字符串,因此$ PATH将被替换而不是附加到...。这将是系统优先选择一个文件而不是另一个文件的问题

–trve.fa7ad
2015年1月27日在16:20



#16 楼

Zues77有一个正确的想法。行动党没有说“我如何才能做到这一点”。 OP想知道如何永久附加到$ PATH:

sudo nano /etc/profile


这是设置所有内容的位置,并且是更改所有需要$的内容的最佳位置路径

#17 楼

我的答案是关于在go-lang上设置Ubuntu linux/amd64的。我遇到了同样的麻烦:设置环境变量的路径(GOPATHGOBIN),在终端退出时丢失它并每次使用source <file_name>重建它。将路径(GOPATHGOBIN)放在~/.bash_profile文件夹中。浪费了几个小时后,我发现解决方案是将GOPATHGOBIN放入~/.bash_rc文件中,方法如下:

export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH:$GOBIN


,这样做,go安装工作正常罚款,没有路径损失。

编辑1:
导致此问题的原因是,非登录shell的设置(例如您在其中运行go代码的ubuntu终端或gnome终端)取自~./bash_rc文件和登录Shell的设置取自~/.bash_profile文件,如果~/.profile文件不可访问,则取自~/.bash_profile文件。

#18 楼

假设您正在运行MacOS,并且您拥有一个值得信任的二进制文件,并且希望在系统中使用该二进制文件,但不一定要将该二进制文件添加到PATH的目录中,则可以选择复制/移动/usr/local/bin的二进制文件,它应该已经在您的PATH中。这将使二进制可执行文件像您可能已经在终端中访问的任何其他二进制文件一样。

#19 楼

可以使用以下命令直接添加它:

echo 'export PATH=$PATH:/new/directory' >> ~/.zshrc
source ~/.zshrc


评论


这个问题被标记为bash,因此不是很有帮助。

– Laurenz Albe
16年7月11日在11:38

这是一个有效的答案->标题仅提及Linux,因此bash和ALSO zsh也可以...如果标记仅为“ bash”,我们也需要在标记中添加“ zsh”

–卡洛斯·萨尔托斯(Carlos Saltos)
18年2月2日在15:04

#20 楼

一种对我有用的添加永久路径的方法是:
cd /etc/profile.d
touch custom.sh
vi custom.sh 
export PATH=$PATH:/path according to your setting/

重新启动计算机,然后我们就可以了。路径将永久存在。

评论


您实际上不需要重新启动计算机。注销并再次登录就足够了。这是一个非常优雅的解决方案,因为无需编辑文件即可轻松撤消所有更改。指定if语句也很容易,这样,如果系统上不存在目录,就不会将其添加到PATH变量中。

–华威
19/12/18在21:42

您需要使用sudo编辑系统文件。您不得在这些文件中使用仅Bash语法,这些文件与非Bash Shell共享。您可能只需要删除导出,因为您现有的配置可能已经负责导出此变量。如果不是,请在单独的行上添加导出路径。

–tripleee
8月1日13:18

另外,/ etc / profile.d是特定于平台的;如果此目录不存在,请检查/ etc / profile并查看它是否具有源(aka。)文件的选项,这些文件不是由您的操作系统管理的,因此您不必直接编辑此系统文件。

–tripleee
8月1日下午13:21

#21 楼

最好的简单方法是以下行:PATH="<directory you want to include>:$PATH"主目录中.bashrc文件中的
。即使关闭终端或重新启动PC,它也不会重置。其永久性

评论


@quant如果您说了什么,它将永久设置您的设置。即使您关闭终端,它也将起作用。

–爱德华·托瓦尔兹
2014年10月4日16:37

#22 楼

我认为最优雅的方法是:

1.在〜。/ bashrc文件中添加此文件

if [ -d "new-path" ]; then
  PATH=$PATH:new-path
fi


2.source〜/ .bashrc

(Ubuntu)

评论


并在上面显示路径:printf“%s \ n” $ PATH

–Robot70
18年6月15日在18:44

#23 楼

这是单线的。它向.bashrc添加了一行。 Tha行将检查目录是否已添加到路径,如果没有,则追加。这将防止每次获取.bashrc时都在路径中复制目录。

echo "[[ \":$PATH:\" != *\":$(pwd)/path/to/add:\"* ]] && export PATH=\"${PATH:+${PATH}}:$(pwd)/path/to/add\"" >> ~/.bashrc

source ~/.bashrc


评论


如果您单引号整个内容,则不必反斜杠转义所有嵌入的双引号。

–tripleee
8月1日下午13:23

#24 楼

对于debian发行版,您必须:

编辑~/.bashrc例如:vim ~/.bashrc

添加export PATH=$PATH:/path/to/dir

,然后重新启动计算机。请注意,如果将root用户编辑~/.bashrc,则添加的环境变量将仅对root用户有效。