如何在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语法。
系统广泛
-
/etc/environment
唯一赋值的列表。 非常适合将/usr/local/something/bin
等系统级目录添加到PATH
variables或定义JAVA_HOME
。 -
/etc/xprofile
启动X Window系统会话时执行的Shell脚本。 这是为每个login到X Window System的用户运行的。 对于每个用户(如/usr/local/something/bin
有效的PATH
条目来说,这是一个不错的select。 该文件包含在其他脚本中,因此使用POSIX shell语法而不是用户shell的语法。 -
/etc/profile
和/etc/profile.d/*
Shell脚本。 这对于仅有壳的系统来说是一个不错的select。 这些文件只能被shell读取。 -
/etc/<shell>.<shell>rc
。 Shell脚本。 这是一个糟糕的select,因为它是单个特定的shell。
用户会话
-
~/.pam_environment
。 独特的作业列表。 在每个用户会话开始时由PAM加载,如果是X Window系统会话或shell,则无关紧要。 您不能引用其他variables,包括HOME
或PATH
因此它的使用受到限制。 -
~/.xprofile
Shell脚本。 这是在用户login到X Window System系统时执行的。 这里定义的variables对每个X应用程序都是可见的。 使用~/bin
或~/go/bin
GOPATH
来扩展PATH
或定义用户特定的GOPATH
或NPM_HOME
完美select。 该文件包含在其他脚本中,因此使用POSIX shell语法而不是用户shell的语法。 您的graphics文本编辑器或由快捷方式启动的IDE将看到这些值。 -
~/.profile
Shell脚本。 只有从terminal或terminal模拟器启动的程序才可见。 这对于纯壳系统来说是一个不错的select。 -
~/.<shell>rc
。 Shell脚本。 这是一个糟糕的select,因为它是单个特定的shell。
分发特定的文档
- Ubuntu的
- ArchLinux的
把export
声明放在~/.bashrc
。 我的.bashrc包含这个:
export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH
您可以通过两种方式永久设置$PATH
。
-
为特定用户设置path:您可能需要在用户的主目录中的
.bash_profile
中创build条目。例如在我的情况下,我将在tomcat用户configuration文件中设置javapath
[tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
-
要为所有系统用户设置通用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( GOPATH
和GOBIN
)的path,在terminal退出时丢失它并使用source <file_name>
重build它的麻烦每次source <file_name>
。错误是把path( GOPATH
和GOBIN
)放在~/.bash_profile
文件夹中。 浪费了好几个小时后,我发现解决的方法是把GOPATH
和GOBIN
放在~/.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