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

Linux,如何将目录添加到$PATH中,使其在不同会话中保持持久性?

背景

我正在尝试将目录添加到我的路径中,以便它始终在我的Linux路径中。我尝试过:

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

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

我怎么能这样做,所以这将是永久设置?

1931713 次浏览

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

对于Bash,您可以将export声明放在~/.bashrc中。例如,我的. 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

  1. 为特定用户设置路径:

    您可能需要在用户的主目录中的文件.bash_profile中进行输入。

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

     echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
  2. 要为所有系统用户设置公共路径,您可能需要像这样设置路径:

     echo "export PATH=$PATH:/path/to/dir" >> /etc/profile

在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上遇到了这个小怪癖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语法和exportset命令。

系统级

  1. /etc/environment唯一赋值列表。允许引用。非常适合添加系统范围的目录,例如/usr/local/something/binPATH变量或定义JAVA_HOME。由PAM系统d使用。

  2. /etc/environment.d/*.conf唯一赋值列表。允许引用。非常适合添加系统范围的目录,如/usr/local/something/binPATH变量或定义JAVA_HOME。配置可以拆分为多个文件,通常每个工具一个(Java、Go和Node.js)。由system d使用,设计时不会将这些值传递给用户登录shell。

  3. /etc/xprofile Shell脚本在启动X Window System会话时执行。这是为每个登录X Window System的用户运行的。对于PATH对每个用户都有效的条目(如/usr/local/something/bin)来说,这是一个不错的选择。该文件包含在其他脚本中,因此请使用POSIX shell语法,而不是用户shell的语法。

  4. /etc/profile/etc/profile.d/* Shell脚本。这是仅shell系统的不错选择。这些文件仅由登录模式下的shell读取。

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

用户会话

  1. ~/.pam_environment。唯一分配列表,不允许引用。PAM在每个用户会话开始时加载,如果它是X Window System会话或shell,则无关紧要。您不能引用其他变量,包括HOMEPATH,因此它的使用有限。由PAM使用。

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

  3. ~/.profile~/.<shell>_profile~/.<shell>_login Shell脚本。它仅对从终端或终端模拟器启动的程序可见。它是纯shell系统的不错选择。由shell在登录模式下使用。

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

Notes

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

手册页

特定分发-留档

相关

登录Shell和非登录Shell的区别?

将脚本文件[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_login(当前用户)

~/.profile(当前用户)

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

摘自:Linux:路径

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

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

我认为最优雅的方式是:

  1. 将其添加到~./bashrc文件中:

    if [ -d "new-path" ]; thenPATH=$PATH:new-pathfi
  2. 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中。

我昨天在寻找将包含我自己的脚本的文件夹添加到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)上设置环境。我遇到了同样的麻烦,设置环境变量(GOPATHGOBIN)的路径,在终端退出时丢失它,每次都使用source <file_name>重建它。

错误是将路径(GOPATHGOBIN)放在~/.bash_profile文件中。浪费了几个小时后,我发现解决方案是将GOPATHGOBIN以以下方式放在~/.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文件中获取。

我认为最优雅的方式是:

  1. 将其添加到~/. bashrc文件中。

    运行此命令:

     gedit ~/.bashrc

    在其中添加您的路径:

     export PATH=$PATH:/opt/node/bin
  2. source ~/.bashrc

(ubuntu)

对于debian发行版,您必须:

  • 编辑文件~/.bashrc。例如:vim ~/.bashrc
  • 添加export PATH=$PATH:/path/to/dir
  • 然后重新启动计算机。请注意,如果您将文件~/.bashrc编辑为root,您添加的环境变量将仅适用于root
  1. 修改“/etc/配置文件”文件:

    vi /etc/profile

    键进入编辑模式并将光标移动到文件末尾。附加条目:

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

    Esc键退出编辑模式,按: wq键保存文件。

  2. 使配置有效

    source /etc/profile

    说明:

    个人资料文件适用于所有用户。如果您希望它仅对活动用户有效,请更改“. bashrc”文件。

假设您正在运行macOS。您有一个您信任的二进制文件,并希望在您的系统中可用,但不一定希望将二进制文件所在的目录添加到您的PATH。

您可以选择将二进制文件复制/移动到/usr/local/bin,它应该已经在您的PATH中。这将使二进制文件像您在终端中可能已经访问的任何其他二进制文件一样可执行。

经过这么多的研究,我找到了一个简单的解决方案(我正在使用基本操作系统),灵感来自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路径的常设解决方案。

这是一个单行。它在.bashrc上添加了一行。该行将检查目录是否已添加到路径中,如果没有,则追加。这将防止每次源.bashrc时在路径中复制您的目录。

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