export PATH=something:$PATH 是什么意思?

40 command-line bash environment-variables

我对 Linux 非常陌生,我将以下命令放在.profile我的主文件夹下的文件末尾:

export PATH="~/.composer/vendor/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

我从 Windows 中稍微了解了环境变量及其值的问题,但在这种情况下,我想了解此命令的作用,以及它包含哪些部分:

  1. 开头的“导出”短语是什么?是否正在导出可用于 Bash 的数据?

  2. 什么是第一个PATH,什么是第二个$PATH,为什么我们需要两个?

kos*_*kos 49

开头的“导出”短语是什么?

export是一个命令(更准确地说,它是一个Bash 内置命令,即它不是一个存在于 中的可执行文件PATH,它是一个 Bash 内置的命令)。

是否正在导出可用于 Bash 的数据?

export将赋值左侧的环境变量设置为赋值右侧的值;这样的环境变量对设置它的进程以及在同一环境中产生的所有子进程都是可见的,即在这种情况下,对于源的 Bash 实例~/.profile和在同一环境中产生的所有子进程(可能包括例如其他外壳) ,这将能够访问它)。

什么是第一个PATH,什么是第二个$PATH,为什么我们需要两个?

PATH上面解释的第一个是要使用的环境变量export

由于PATH通常包含的东西时,~/.profile其来源(默认情况下它包含/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games),简单的设置PATH,以~/.composer/vendor/bin将使PATH只包含~/.composer/vendor/bin

因此,由于对命令中变量的引用在命令评估时被 Bash 替换为(或“扩展”到)变量的值,因此:$PATH被放在要分配给的值的末尾,PATH以便PATH最终包含~/.composer/vendor/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games(即开始时PATH已经包含加~/.composer/vendor/bin:号的内容)。

  • 很棒的解释。 (2认同)
  • 那么冒号“:”在 Bash 中充当分隔符吗? (2认同)

小智 21

https://help.ubuntu.com/community/EnvironmentVariables可能会帮助你。也man bash可能有助于理解它是如何工作的(至少在 Bash 中)

无论如何 - 至于PATH=你基本上是在设置PATH变量,添加一些新的搜索路径,在最后添加已经/以前设置的路径, with $PATH(这基本上是对PATH变量的引用)。

所以,假设你PATH到目前为止设置为:

PATH="x:y:z"
Run Code Online (Sandbox Code Playgroud)

然后你设置

PATH="a:b:c:$PATH"
Run Code Online (Sandbox Code Playgroud)

PATH之后会像:

a:b:c:x:y:z
Run Code Online (Sandbox Code Playgroud)

我希望这是有道理的。

最重要的是,您导出新变量,以便在您的环境中知道它,包括子进程/子shell。

还要注意,设置的目录顺序PATH可能很重要。类似的东西PATH="$PATH:a:b:c"会给你结果:

x:y:z:a:b:c
Run Code Online (Sandbox Code Playgroud)

这将在搜索命令时影响目录/路径的顺序(如果您的命令位于多个目录中,将使用第一个找到的 - 这有时可能会给您带来一些意想不到的结果)。


小智 2

我已经在这里和网络上的其他地方阅读过,与一位朋友讨论过这一点,并决定作为一名新生(也许更多的是 Ubuntu 新生,然后这里的一些人可能会认为),我应该映射这个命令 - 我应该制作一个地图并从而了解它的情况和行踪:

初步数据

如果现在您不理解本章中的某些内容 - 不用担心,随着您继续阅读,它会变得更清楚,但要理解这一点,您确实需要阅读环境变量(EV)、它们的值和目的。现在我将尝试用简单的语言和映射的方法来解释该命令,对于像我这样的新手,并且只针对新手。在这里竭尽全力...

测绘

export PATH="~/.composer/vendor/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

Ubuntu 15.10 附带的 EV“PATH”的原始值为:

/usr/bin:/usr/sbin
Run Code Online (Sandbox Code Playgroud)

在命令本身中,请注意我们有两个 PATH 短语。最后一个是 $PATH - $ 表示“打印你旁边的 EV 的原始值或值”;旁边的EV是PATH EV。

我们导出了路径变量本身(使其也可用于子进程,即在 CLI 中运行的 IE 进程,它们实际上不是 Bash shell,而是在其中运行(例如Drush,即Drupal CLI)。

除了导出之外,我们还对其进行了扩展:第一个 PATH 短语 (PATH=) 使用我们向原始值(由 $PATH 表示)添加一个额外的值 (~/.composer/vendor/bin:)。

  • 我在上一段中提到的新值末尾的冒号 (:) 用于区分新值和原始值。

  • “”是值所在的区域。

  • ~ 是主文件夹。


我希望在完成这个映射之后,像我这样的新生可以更清楚地掌握命令。