1009

在 Linux 上,如何将目录添加到 $PATH 以便它在不同的会话中保持不变?

背景

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

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

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

我该怎么做才能永久设置?

4

24 回答 24

1137

您需要将其添加到您的~/.profileor~/.bashrc文件中。 

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

根据您正在执行的操作,您可能还需要符号链接到二进制文件:

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

请注意,这不会在会话的其余部分自动更新您的路径。为此,您应该运行:

source ~/.profile 
or
source ~/.bashrc
于 2013-02-01T01:01:27.073 回答
346

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

变量值通常存储在分配列表或在系统或用户会话开始时运行的 shell 脚本中。对于 shell 脚本,您必须使用特定的 shell 语法和export/或set命令。

系统范围

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

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

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

  4. /etc/profile/etc/profile.d/*外壳脚本。对于纯 shell 系统,这是一个不错的选择。这些文件只能由登录模式下的 shell 读取。

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

用户会话

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

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

  3. ~/.profile, ~/.<shell>_profile, ~/.<shell>_loginShell 脚本。它仅对从终端或终端仿真器启动的程序可见。对于纯 shell 系统来说,这是一个不错的选择。由 shell 在登录模式下使用。

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

笔记

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

手册页

特定于发行版的文档

登录外壳和非登录外壳之间的区别?

于 2014-11-16T21:29:08.633 回答
253

在 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,这可能就是原因。

于 2014-05-27T16:27:44.623 回答
81

对于 Bash,您可以将export声明放入~/.bashrc. 例如,我的 .bashrc 包含这一行:

export PATH=/var/lib/gems/1.8/bin:/home/ash/.bin:$PATH
于 2013-02-01T00:59:39.860 回答
33

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

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

    您可能需要在.bash_profile用户的主目录中的文件中创建条目。

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

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

     echo "export PATH=$PATH:/path/to/dir" >> /etc/profile
    
于 2014-01-03T11:35:39.307 回答
17

您可以在CentOSRed Hat Linux (RHEL) 上为本地用户使用:

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

这会将当前目录(或者您可以使用其他目录)添加到 PATH。这使它成为永久性的,但它会在下次用户登录时生效。

如果您不想重新登录,那么您可以使用:

source ~/.bash_profile

这会重新加载# User specific environment and startup programs. 此评论存在于文件中.bash_profile

于 2016-10-21T04:11:17.750 回答
12

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

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

~/.bash_profile(对于当前用户)

~/.bash_login(对于当前用户)

~/.profile(对于当前用户)

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

摘自:Linux:Añadir ruta al PATH

于 2016-06-29T08:59:52.087 回答
10

我认为最优雅的方式是:

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

    运行此命令:

     gedit ~/.bashrc
    

    在其中添加您的路径:

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

(Ubuntu)

于 2017-11-04T13:40:53.067 回答
9
  1. 修改“/etc/profile”文件:

    vi /etc/profile
    

    I键进入编辑模式,将光标移至文件末尾。附加条目:</p>

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

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

  2. 使配置生效

    source /etc/profile
    

    解释:</p>

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

于 2018-11-23T09:24:45.433 回答
8

昨天,我在寻找将包含我自己的脚本的文件夹添加到 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并将我的脚本放在那里。

于 2017-03-04T11:09:57.563 回答
7

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

于 2013-02-01T00:59:22.273 回答
5

经过这么多研究,我找到了一个简单的解决方案(我使用的是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 路径的永久解决方案。

于 2019-11-10T10:27:46.913 回答
4

使用以下行将脚本文件添加[name_of_script].sh/etc/profile.d文件夹:

export PATH=$PATH:/dir

文件夹中的每个脚本都会在登录时/etc/profile.d自动执行。/etc/profile

于 2015-04-10T12:12:15.397 回答
4

添加对我有用的永久路径的一种方法是:

cd /etc/profile.d
touch custom.sh
vi custom.sh 
export PATH=$PATH:/path according to your setting/

重新启动您的计算机,我们开始;路径将永久存在。

于 2016-05-28T03:19:04.867 回答
4

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

echo 'export PATH=$PATH:/new/directory' >> ~/.zshrc
source ~/.zshrc
于 2016-07-11T11:31:39.887 回答
4

我的回答是参考在Ubuntu Linux (amd64)上设置Go环境。我遇到了设置环境变量(和)的路径,在终端退出时丢失它并使用每次重建它的同样麻烦。GOPATHGOBINsource <file_name>

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

于 2017-05-04T21:13:24.050 回答
3

添加导出命令的文件取决于您是处于登录模式还是非登录模式。

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

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

上面提到的文件是系统变量所在的位置。

于 2013-11-05T13:35:33.467 回答
3

永久添加到 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

于 2014-11-14T17:35:15.263 回答
3

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

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

于 2019-07-04T13:25:26.790 回答
3

Zues77 的想法是正确的。OP没有说“我怎么能破解这个?”。OP 想知道如何永久附加到$PATH

sudo nano /etc/profile

这是为所有东西设置的地方,也是为所有需要$PATH的东西更改它的最佳位置。

于 2015-09-25T02:26:23.193 回答
2

最简单的方法是以下行,

PATH="<directory you want to include>:$PATH"

在主目录中的.bashrc 文件中。

即使您关闭终端或重新启动 PC,它也不会被重置。它是永久性的。

于 2013-10-18T17:00:29.857 回答
1

我认为最优雅的方式是:

  1. ~./bashrc文件中添加:

    if [ -d "new-path" ]; then
      PATH=$PATH:new-path
    fi
    
  2. source *~/.bashrc*

(Ubuntu)

于 2016-07-17T02:50:27.067 回答
1

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

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

source ~/.bashrc
于 2020-02-01T11:08:15.690 回答
-1

对于Debian发行版,您必须:

  • 编辑文件~/.bashrc。例如:vim ~/.bashrc
  • 添加export PATH=$PATH:/path/to/dir
  • 然后重新启动您的计算机。请注意,如果您~/.bashrc以 root 身份编辑文件,您添加的环境变量将仅适用于 root
于 2017-12-27T21:18:00.280 回答