在.bashrc文件中,export PATH这一行的作用是什么?

我对Linux不是很熟悉,根据教程我有以下疑问。

我需要修改bashrc文件。这个文件包含了什么样的设置?我觉得与bash shell环境有关,但我不太确定。

我需要插入这一行:

export PATH=$HOME/.local/bin:$HOME/.local/usr/bin:$PATH

这行代码到底是什么意思?
我认为export语句用于创建一个新的变量,使其在其他程序中可用。
但是这行代码到底是什么意思?PATH是我正在定义的变量的名称吗?$HOME是什么意思? :符号在PATH=$HOME/.local/bin$HOME/.local/usr/bin之间以及前面的$PATH部分表示什么意思?
这个表达式到底是什么意思?

冒号(:)是每个部分之间的分隔符。没有它,你的路径将成为一个连续的运行,并且无法正常工作。 - Terrance
在Ubuntu中,这种PATH修改已经在~/.profile文件中完成,因此在~/.bashrc中执行类似操作有点不一致。如果需要的话,最好修改~/.profile中已有的代码。目前,默认的~/.profile文件包含以下行:PATH="$HOME/bin:$HOME/.local/bin:$PATH" - Gunnar Hjalmarsson
@GunnarHjalmarsson:有一些情况会使.profile和.bashrc不同。.profile文件由登录shell解析,而不是子shell。但是,由于您需要登录才能启动子shell,所以这没问题,因为子shell将继承$PATH。.bashrc文件不会被登录shell解析,但会被子shell解析。区别在于当您有一些不是登录shell的子进程(例如一些调用其他脚本的精巧自动化脚本,比如git提交钩子)时- .profile中的任何内容都不会被读取,因此它们将被忽略。 - slebetman
@slebetman:没错,而且对于桌面来说,还有一个你没有提到的区别:与~/.bashrc不同,~/.profile是由显示管理器调用的,因此只有通过~/.profile设置的变量在你从图形环境启动程序时才可用。而且这个过程发生得很早,所以对于会话中的自动启动进程应该没问题。 - Gunnar Hjalmarsson
2个回答

回顾一下这个问题中提到的所有内容,
“export”部分
“export”行意味着在其后声明的变量将对子进程可访问。换句话说,进程将能够通过shell环境访问在“export”关键字之后声明的变量。因此,如果你执行了类似于“export FOO="BAR"”然后在shell环境中应用了这些更改,你可以输入“$FOO”并得到“BAR”。
“PATH”部分
路径行就像你所说的那样:它声明了一个名为“PATH”的变量,用于shell环境。在bash环境中,“PATH”有一个特殊的目的,即定义计算机查找程序的位置。这使您可以为脚本输入自定义命令,而无需输入完整的目录。“请注意,默认情况下,PATH被标记为导出,因此不必重写此行。不过,这样做也没有坏处。”
“PATH”变量中的“$HOME”部分

在分配给PATH变量的路径的开头,声明了$HOME。这意味着计算机将基本上获取存储在HOME中的值,并在读取时将其复制粘贴到行的其余部分之前。

两个路径之间的:

:相当于句子中的逗号。它只是分隔这三个目录。如果没有这三个目录,控制台将无法识别收到的命令。这三个位置是最常用于存储脚本/命令文件的三个目录,因此应该可以通过终端访问,而无需编写完整的文件路径。


很棒的答案!“export行”意味着你在其后声明的变量将对子进程可访问。这些子进程的父进程是我将要运行命令的终端吗? - vadasambar

PATH变量让bash知道在哪里寻找可执行程序,所以如果你在$HOME/.local/bin中有一个脚本或其他可执行文件,修改PATH将使你能够像使用lsdf一样输入和运行该文件。

export只是意味着将PATH变量也提供给从bash运行的其他程序。

至于:,它只是每个目录之间的分隔符。它与单词列表中的逗号相同,没有其他含义。