如何在Linux / Unix上永久设置$ PATH?

我试图添加一个目录到我的path,所以它将始终在我的Linuxpath。 我试过了:

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

这是有效的,但是每次我退出terminal并启动一个新的terminal实例,这个path都会丢失,我需要再次运行export命令。

我该怎么做,这将永久设置?

你需要把它添加到你的~/.profile文件中。

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

根据你在做什么,你也可能希望符号链接到二进制文件:

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

请注意,这不会自动更新会话剩余部分的path。 要做到这一点,你应该运行:

 source ~/.profile 

我不能相信没有人提到/etc/environment文件。 唯一的目的是存储环境variables。 原来$ PATHvariables是在这里定义的。 这是来自我的/etc/environment文件的一个粘贴:

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

所以你可以打开这个文件作为根,并添加任何你想要的。

要获得即时结果,请运行(以普通用户身份根用户身份运行)

 source /etc/environment && export PATH 

更新:

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

 source /etc/environment 

我在Ubuntu 15.10上遇到了这个小怪癖,但是如果你的zsh没有得到正确的PATH ,这可能是为什么

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

variables值通常存储在分配列表或在系统或用户会话开始时运行的shell脚本中。 如果是shell脚本,则必须使用特定的shell语法。

系统广泛

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

用户会话

  1. ~/.pam_environment 。 独特的作业列表。 在每个用户会话开始时由PAM加载,如果是X Window系统会话或shell,则无关紧要。 您不能引用其他variables,包括HOMEPATH因此它的使用受到限制。
  2. ~/.xprofile Shell脚本。 这是在用户login到X Window System系统时执行的。 这里定义的variables对每个X应用程序都是可见的。 使用~/bin~/go/bin GOPATH来扩展PATH或定义用户特定的GOPATHNPM_HOME完美select。 该文件包含在其他脚本中,因此使用POSIX shell语法而不是用户shell的语法。 您的graphics文本编辑器或由快捷方式启动的IDE将看到这些值。
  3. ~/.profile Shell脚本。 只有从terminal或terminal模拟器启动的程序才可见。 这对于纯壳系统来说是一个不错的select。
  4. ~/.<shell>rc 。 Shell脚本。 这是一个糟糕的select,因为它是单个特定的shell。

分发特定的文档

  • Ubuntu的
  • ArchLinux的

export声明放在~/.bashrc 。 我的.bashrc包含这个:

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

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

  1. 为特定用户设置path:您可能需要在用户的主目录中的.bash_profile中创build条目。

    例如在我的情况下,我将在tomcat用户configuration文件中设置javapath

     [tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile 
  2. 要为所有系统用户设置通用path,您可能需要设置如下path:

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

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

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

这会将当前目录(或者可以使用其他目录)添加到PATH中,这会使其永久生效,但会在下次用户login时生效。

如果你不想重新login,那么可以使用:

 source ~/.bash_profile 

重新加载# User specific environment and startup programs这个评论是在.bash_profile目前

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

如果您处于login模式或非login模式,则添加导出命令的文件将取决于您。

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

如果您处于非login模式,则正在查找文件/.profile或目录/.profiles.d中的文件

上面提到的文件系统variables在哪里。

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

Zues77有正确的想法。 OP没有说“我怎么能通过这个办法破解”。 OP想知道如何永久追加到$ PATH:

 sudo nano /etc/profile 

这是它为所有东西设置的地方,并且是为所有需要$ PATH的东西改变它的最好的地方

您也可以永久设置,编辑这些文件之一:

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

~/.bash_profile (针对实际用户)

~/.bash_login (对于实际用户)

~/.profile (对于实际用户)

您也可以使用/etc/environment设置一个永久的PATH环境variables,但不支持variables扩展

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

我昨天偶然发现了这个问题,当寻找一种方法来添加一个包含我自己的脚本的文件夹到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 

因此,我所要做的只是创build文件夹~/bin并把我的脚本放在那里。

我的回答是在Ubuntu linux/amd64上设置go-lang 。我面临着设置环境variables( GOPATHGOBIN )的path,在terminal退出时丢失它并使用source <file_name>重build它的麻烦每次source <file_name> 。错误是把path( GOPATHGOBIN )放在~/.bash_profile文件夹中。 浪费了好几个小时后,我发现解决的方法是把GOPATHGOBIN放在~/.bash_rc文件中,方法如下:

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

这样做,安装工作正常,没有path损失。

编辑1:这个问题可以相关的原因是,像你的ubuntuterminal或我们运行代码的gnome-terminal这样的非loginshell的设置取自~./bash_rc文件,loginshell的设置被采用从~/.bash_profile文件和~/.profile文件中,如果~/.bash_profile文件不可访问。

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

我认为最优雅的方式是:

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

gedit〜。/ bashrc

在里面添加你的path

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

2.source〜/ .bashrc

(Ubuntu的)

永久添加PATHvariables

全球:

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

本地(仅限用户):

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

用于全局重启。 为了本地login。

之前:

 $ 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 

或者,您可以编辑configuration文件:

 $ 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关键字很可能是无用的,因为PATHvariables很可能已经标记为导出。 – gniourf_gniourf

一个方法来添加永久path,这对我来说是:cd /etc/profile.d touch custom.sh vi custom.sh export PATH = $ PATH:/ path根据您的设置/重新启动您的计算机,在这里,我们走的path会永久欢呼

我认为最优雅的方式是:

1.join〜/ .bashrc文件

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

2.source〜 / .bashrc

(Ubuntu的)

我刚刚遇到同样的问题,并粘贴PATH得到重新login时总是重置的原因。经过大量的search工作,我终于意识到这是一个自定义的系统问题,当我看到这个代码在我的/ etc / passwd文件:

 root:x:0:0:root:/root:/usr/sbin/nologin 

这意味着这个自定义系统禁用root的bash shell。
如果你已经尝试了所有的解决scheme,但没有获得任何有用的信息。而且你使用一个自定义的系统,你可以看看我可能的原因。

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

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