PATH的目的是什么?
这是您的Shell查找程序的方式。ls
例如,当您键入内容时,它将运行一个名为的程序,该程序ls
可以在/bin
包括Mac OS X在内的大多数系统中使用。您的外壳程序只能找到该程序,因为/bin
它位于中PATH
。
Shell PATH
从左到右依次搜索程序。如果ls
您的系统上有两个程序,并且它们的目录都在您的目录中PATH
,它将在目录中第一个列出的目录中找到一个PATH
。
/ etc / paths和〜/ .bash_profile有什么区别
设置的路径/etc/paths
会PATH
在启动时添加到Mac OS X上所有shell中。
~/.bash_profile
仅仅是Bash在启动时运行的几个Shell脚本之一,其中一些是特定于Bash的。因此,如果你改变你的shell - Mac OS X中还附带tcsh
和zsh
,例如-改变作出/etc/bashrc
不应用到新的外壳。
同样,/etc/paths
是系统级配置文件,而~/.bash_profile
每个用户都是。如果您在Mac上设置了多个交互式用户,则不想将目录添加到/etc/paths
不想出现在每个用户的目录中的目录PATH
。对于/etc/bashrc
,这同样适用,只是当然仅适用于使用Bash作为其shell的用户。
PATH和$ PATH和$ {PATH}有什么区别?
设置变量时,通常只会看到没有标记的变量。FOO=bar
将FOO
环境变量设置为字符串bar
。如果键入set
,shell将显示所有环境变量,在这种情况下,您还将看到没有任何符号的变量。
$PATH
并且${PATH}
通常可以互换。它们告诉外壳PATH
程序就地扩展当前变量的值。不同之处在于如何使用它们以及在何处使用它们。例如:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
在第二个echo
命令中,shell不打印任何内容,因为它要求shell打印一个名为的变量FOOx
,该变量不存在。Shell将不存在的变量视为空。由于第三个echo
使用花括号语法,因此它使外壳程序可以看到您正在请求该FOO
变量,并且该x
字符只是您要立即打印的另一个字符。
顺便说一句,还有另一种不用花括号就能获得相同效果的方法:
$ echo "$FOO"x
barx
环境变量用双引号引起来,并且引号将x
变量扩展与变量分开,以便外壳程序执行正确的操作。
我在FOO
这里使用环境变量只是为了清楚起见。我上面编写的所有内容同样适用于PATH
,因为它只是另一个环境变量。示例文本将长很多。
导出路径是什么意思?我们什么时候出口?
以上面的FOO
示例为例,如果您要运行其他程序,则不会看到该FOO
变量,因为该变量未导出。它仅存在于一个shell实例中:
$ echo $FOO
bar
$ bash
$ echo $FOO
$ exit
$ export FOO
$ bash
$ echo $FOO
bar
当我第bash
一次在已经使用过的外壳下运行一个新的外壳时,然后尝试显示的值FOO
,我得到了一个空白,因为FOO
没有将其导出供子程序查看。然后我退出第二个bash
实例,将其导出,bash
再次运行,现在第二个实例看到的值FOO
。
您可以使用export
,当你想分项目看在shell设置的值,当你不希望这样的事情发生不使用它。
通常,我不会在shell脚本中导出临时变量,因为我不希望它们更改从该shell脚本运行的程序的行为。
我不会回答您的任何其他问题。您一次只能问一个问题。我只回答了这么多,因为它们之间存在模糊的联系。其他所有内容都属于一个单独的问题。