Linux,如何将目录添加到$PATH中,使其在不同会话中保持持久性?
我正在尝试将目录添加到我的路径中,以便它始终在我的Linux路径中。我尝试过:
export PATH=$PATH:/path/to/dir
这是可行的,但是每次我退出终端并启动一个新的终端实例时,此路径都会丢失,我需要再次运行导出命令。
我怎么能这样做,所以这将是永久设置?
您可以将该行添加到控制台配置文件中(例如,. bashrc或)。
对于Bash,您可以将export声明放在~/.bashrc中。例如,我的. bashrc包含以下行:
export
~/.bashrc
export PATH=/var/lib/gems/1.8/bin:/home/ash/.bin:$PATH
您需要将其添加到#0或#1文件中。
export PATH="$PATH:/path/to/dir"
根据您正在做的事情,您可能还需要符号链接到二进制文件:
cd /usr/binsudo ln -s /path/to/binary binary-name
请注意,这不会在会话的剩余时间内自动更新您的路径。要做到这一点,你应该运行:
source ~/.profileorsource ~/.bashrc
最简单的方法是下面一行,
PATH="<directory you want to include>:$PATH"
在主目录中的. bashrc文件。
即使您关闭终端或重新启动PC,它也不会重置。它是永久性的。
添加出口命令的文件取决于您是处于login-mode还是non-login-mode。
如果您处于登录模式,您要查找的文件是/etc/bash或/etc/bash.bashrc。
如果您处于非登录模式,您正在查找文件/.profile或目录/.profiles.d中的文件
上面提到的文件是系统变量所在的位置。
您可以通过两种方式永久设置$PATH。
$PATH
为特定用户设置路径:
您可能需要在用户的主目录中的文件.bash_profile中进行输入。
.bash_profile
例如,在我的情况下,我将在Tomcat用户配置文件中设置java路径*
java
echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
要为所有系统用户设置公共路径,您可能需要像这样设置路径:
echo "export PATH=$PATH:/path/to/dir" >> /etc/profile
在Ubuntu中,编辑/etc/environment。它的唯一目的是存储环境变量。最初$PATH变量在这里定义。
/etc/environment
这是我的/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
如果您使用Z shell(zsh),请在/etc/zsh/zshenv文件中的注释之后添加这一行:
zsh
/etc/zsh/zshenv
source /etc/environment
我在Ubuntu 15.10上遇到了这个小怪癖Ubuntu 15.10(狡猾的狼人),但是如果你的zsh没有得到正确的PATH,这可能是原因。
永久添加到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:/sbinexport 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
你不应该在这里使用双引号!回声导出PATH=$PATH:/new/path/变量'…顺便说一下,导出关键字很可能是无用的,因为PATH变量很可能已经标记为导出。-gniourf_gniourf
有多种方法可以做到这一点。实际的解决方案取决于目的。
变量值通常存储在赋值列表或在系统或用户会话开始时运行的外壳脚本中。对于外壳脚本,您必须使用特定的shell语法和export或set命令。
set
/etc/environment唯一赋值列表。允许引用。非常适合添加系统范围的目录,例如/usr/local/something/bin到PATH变量或定义JAVA_HOME。由PAM和系统d使用。
/usr/local/something/bin
PATH
JAVA_HOME
/etc/environment.d/*.conf唯一赋值列表。允许引用。非常适合添加系统范围的目录,如/usr/local/something/bin到PATH变量或定义JAVA_HOME。配置可以拆分为多个文件,通常每个工具一个(Java、Go和Node.js)。由system d使用,设计时不会将这些值传递给用户登录shell。
/etc/environment.d/*.conf
/etc/xprofile Shell脚本在启动X Window System会话时执行。这是为每个登录X Window System的用户运行的。对于PATH对每个用户都有效的条目(如/usr/local/something/bin)来说,这是一个不错的选择。该文件包含在其他脚本中,因此请使用POSIX shell语法,而不是用户shell的语法。
/etc/xprofile
/etc/profile和/etc/profile.d/* Shell脚本。这是仅shell系统的不错选择。这些文件仅由登录模式下的shell读取。
/etc/profile
/etc/profile.d/*
/etc/<shell>.<shell>rc。Shell脚本。这是一个糟糕的选择,因为它是单shell特定的。在非登录模式下使用。
/etc/<shell>.<shell>rc
~/.pam_environment。唯一分配列表,不允许引用。PAM在每个用户会话开始时加载,如果它是X Window System会话或shell,则无关紧要。您不能引用其他变量,包括HOME或PATH,因此它的使用有限。由PAM使用。
~/.pam_environment
HOME
~/.xprofile Shell脚本。这是在用户登录X Window System系统时执行的。此处定义的变量对每个X应用程序都可见。使用~/bin或~/go/bin等值扩展PATH或定义用户特定的GOPATH或NPM_HOME的完美选择。该文件包含在其他脚本中,因此使用POSIX shell语法而不是用户shell的语法。您的图形文本编辑器或按快捷方式启动的IDE将看到这些值。
~/.xprofile
~/bin
~/go/bin
GOPATH
NPM_HOME
~/.profile、~/.<shell>_profile、~/.<shell>_login Shell脚本。它仅对从终端或终端模拟器启动的程序可见。它是纯shell系统的不错选择。由shell在登录模式下使用。
~/.profile
~/.<shell>_profile
~/.<shell>_login
~/.<shell>rc。Shell脚本。这是一个糟糕的选择,因为它是特定于单个shell的。由shell在非登录模式下使用。
~/.<shell>rc
Wayland上的GNOME启动一个用户登录shell来获取环境。它有效地使用了登录shell配置~/.profile、~/.<shell>_profile、~/.<shell>_login文件。
登录Shell和非登录Shell的区别?
将脚本文件[name_of_script].sh添加到/etc/profile.d文件夹,行:
[name_of_script].sh
/etc/profile.d
export PATH=$PATH:/dir
/etc/profile.d文件夹中的每个脚本都由/etc/profile在登录时自动执行。
Zues77有正确的想法。OP没有说“我如何破解这个?”。OP想知道如何永久附加到$PATH:
sudo nano /etc/profile
这是为所有内容设置的位置,也是为所有需要$PATH的内容更改它的最佳位置。
添加永久路径的一种方法,对我有效,是:
cd /etc/profile.dtouch custom.shvi custom.shexport PATH=$PATH:/path according to your setting/
重新启动您的计算机,我们开始了;路径将永久存在。
您也可以永久设置它,编辑以下文件之一:
/etc/profile(所有用户)
~/.bash_profile(当前用户)
~/.bash_profile
~/.bash_login(当前用户)
~/.bash_login
~/.profile(当前用户)
您还可以使用/etc/environment设置永久PATH环境变量,但它不支持变量扩展。
摘自:Linux:路径
可以使用以下命令直接添加:
echo 'export PATH=$PATH:/new/directory' >> ~/.zshrcsource ~/.zshrc
我认为最优雅的方式是:
将其添加到~./bashrc文件中:
if [ -d "new-path" ]; thenPATH=$PATH:new-pathfi
source *~/.bashrc*
(ubuntu)
您可以在CentOS或红帽Linux(RHEL)上为本地用户使用:
echo $"export PATH=\$PATH:$(pwd)" >> ~/.bash_profile
这会将当前目录(或者您可以使用另一个目录)添加到PATH。这使其永久化,但它在下次用户登录时生效。
如果您不想重新登录,那么您可以使用:
source ~/.bash_profile
重新加载# User specific environment and startup programs。此注释存在于文件.bash_profile中。
# User specific environment and startup programs
我昨天在寻找将包含我自己的脚本的文件夹添加到PATH的方法时偶然发现了这个问题-并且惊讶地发现我自己的~/.profile文件(在Linux薄荷 18.1上)已经包含了这个:
# set PATH so it includes user's private bin if it existsif [ -d "$HOME/bin" ] ; thenPATH="$HOME/bin:$PATH"fi
因此,我所要做的就是创建文件夹~/bin并将我的脚本放在那里。
我的答案是在ubuntuLinux(amd64)上设置走环境。我遇到了同样的麻烦,设置环境变量(GOPATH和GOBIN)的路径,在终端退出时丢失它,每次都使用source <file_name>重建它。
GOBIN
source <file_name>
错误是将路径(GOPATH和GOBIN)放在~/.bash_profile文件中。浪费了几个小时后,我发现解决方案是将GOPATH和GOBIN以以下方式放在~/.bash_rc文件中:
~/.bash_rc
export GOPATH=$HOME/goexport GOBIN=$GOPATH/binexport PATH=$PATH:$GOPATH:$GOBIN
在这样做的过程中,Go安装工作正常,没有路径损失。
与此问题相关的原因是,非登录shell的设置,例如您的Ubuntu终端或我们运行Go代码的GNOME终端,是从~./bash_rc文件中获取的,登录shell的设置是从~/.bash_profile文件中获取的。如果~/.bash_profile文件无法访问,则从~/.profile文件中获取。
~./bash_rc
将其添加到~/. bashrc文件中。
运行此命令:
gedit ~/.bashrc
在其中添加您的路径:
export PATH=$PATH:/opt/node/bin
source ~/.bashrc
对于debian发行版,您必须:
vim ~/.bashrc
修改“/etc/配置文件”文件:
vi /etc/profile
按我键进入编辑模式并将光标移动到文件末尾。附加条目:
export PATH=$PATH:/path/to/dir;
按Esc键退出编辑模式,按: wq键保存文件。
使配置有效
source /etc/profile
说明:
个人资料文件适用于所有用户。如果您希望它仅对活动用户有效,请更改“. bashrc”文件。
假设您正在运行macOS。您有一个您信任的二进制文件,并希望在您的系统中可用,但不一定希望将二进制文件所在的目录添加到您的PATH。
您可以选择将二进制文件复制/移动到/usr/local/bin,它应该已经在您的PATH中。这将使二进制文件像您在终端中可能已经访问的任何其他二进制文件一样可执行。
/usr/local/bin
经过这么多的研究,我找到了一个简单的解决方案(我正在使用基本操作系统),灵感来自Flutter-逐步安装在Linux-Ubuntu。
运行以下命令打开编辑模式中的. bashrc文件。(您也可以使用vi或任何其他编辑器)。~$ sudo nano ~/.bashrc在文件末尾添加以下行并保存。export PATH="[FLUTTER_SDK_PATH]/flutter/bin:$PATH"例如:export PATH="/home/rageshl/dev/flutter/bin:$PATH"
运行以下命令打开编辑模式中的. bashrc文件。(您也可以使用vi或任何其他编辑器)。
~$ sudo nano ~/.bashrc
在文件末尾添加以下行并保存。
export PATH="[FLUTTER_SDK_PATH]/flutter/bin:$PATH"
例如:
export PATH="/home/rageshl/dev/flutter/bin:$PATH"
我相信这是在Ubuntu发行版中设置Flutter路径的常设解决方案。
这是一个单行。它在.bashrc上添加了一行。该行将检查目录是否已添加到路径中,如果没有,则追加。这将防止每次源.bashrc时在路径中复制您的目录。
.bashrc
echo "[[ \":\$PATH:\" != *\":$(pwd)/path/to/add:\"* ]] && export PATH=\"\${PATH:+\${PATH}}:$(pwd)/path/to/add\"" >> ~/.bashrc source ~/.bashrc