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