Mac OS 上的 PATH 是什么?

gwg*_*gwg 13 osx path binary

什么是PATH在一个Mac OS?我已经用它来安装全局命令行工具,但我找到的唯一文档是这样做的教程,没有真正解释幕后发生的事情。我也没有在Wikipedia上找到相关页面。

那么和**的目的是PATH什么,有什么区别?/etc/paths~/.bash_profile

例如,在我的paths文件中,我看到:

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

但在我的~/.bash_profile,我看到了这一点:

# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH
Run Code Online (Sandbox Code Playgroud)

这只是对paths文件的特定于用户的添加吗?里面有什么东西paths,比如/usr/bin

Jos*_* R. 17

1. PATH 的目的是什么?

PATH是一个环境变量,它包含一个以冒号分隔的目录列表,您的 shell 将在其中查找您在命令行中命名的可执行文件,而不提供它们的显式路径(如您的jsdoc示例中所示)。因此,如果你PATH

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

然后将在这些目录中搜索您按名称调用的任何可执行文件(按该顺序),找到的第一个可执行文件就是执行的那个。

2. /etc/paths 和 ~/.bash_profile 有什么区别

根据ServerFault上的这个问题/etc/paths用于设置PATH全局(即系统范围,为所有用户),而~/.bash_profile用于设置每个用户的首选项(~用户的主目录在哪里)。写入的内容.bash_profile可以添加到全局PATHfrom/etc/paths或完全覆盖它。

根据记录,这/etc/paths似乎是 MAC OS 的一个特性:至少我没有在 GNU/Linux 上遇到过它。


War*_*ung 8

PATH的目的是什么?

这是您的外壳程序查找程序的方式。ls例如,当您键入 时,它正在运行一个名为的程序,该程序ls位于/bin大多数系统中,包括 Mac OS X。您的 shell 只能找到它,因为/bin它位于PATH.

shellPATH从左到右按顺序搜索程序。如果ls您的系统上有两个程序,并且它们的目录都PATH在您的PATH.

/etc/paths 和 ~/.bash_profile 有什么区别

在 Mac OS X 上的所有 shell 中,在启动时将设置的路径/etc/paths添加到PATH

~/.bash_profile只是 Bash 在启动时运行的几个 shell 脚本之一,其中一些是 Bash 特定的。因此,如果你改变你的shell - Mac OS X中还附带tcshzsh,例如-改变作出/etc/bashrc不应用到新的外壳。

此外,/etc/paths是系统级配置文件,而~/.bash_profile每个用户。如果您在 Mac 上设置了多个交互式用户,您不会想要添加/etc/paths不想出现在每个人的PATH. 对于 来说也是如此/etc/bashrc,当然这仅适用于使用 Bash 作为其 shell 的用户。

PATH 与 $PATH 和 ${PATH} 有什么区别?

在设置变量时,您通常只会看到没有符号的变量。FOO=barFOO环境变量设置为 string bar。如果您键入set,shell 会显示所有环境变量,在这种情况下,您还会看到没有任何符号的变量。

$PATH并且${PATH}通常可以互换。它们告诉 shellPATH就地扩展当前变量的值。区别与您使用它们的方式和地点有关。例如:

$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx

$ echo ${FOO}x
barx
Run Code Online (Sandbox Code Playgroud)

在第二个echo命令中,shell 不打印任何内容,因为它要求 shell 打印一个名为 的变量FOOx,该变量不存在;shell 将不存在的变量视为空变量。因为第三个echo使用大括号语法,它允许 shell 看到您正在请求FOO变量,并且这x只是您想在之后立即打印的另一个字符。

顺便说一句,还有另一种无需花括号即可获得相同效果的方法:

$ echo "$FOO"x
barx
Run Code Online (Sandbox Code Playgroud)

环境变量用双引号展开,引号将 和x变量展开分开,因此 shell 会做正确的事情。

我在FOO这里使用环境变量只是为了清楚起见。我上面写的所有内容也同样适用于PATH,因为它只是另一个环境变量。示例文本会更长。

出口路径是什么意思?我们什么时候出口?

以上面的FOO例子为例,如果你要运行另一个程序,它不会看到FOO变量,因为它没有被导出。它只存在于那个 shell 实例中:

$ echo $FOO
bar
$ bash
$ echo $FOO

$ exit
$ export FOO
$ bash
$ echo $FOO
bar
Run Code Online (Sandbox Code Playgroud)

当我第一次bash在我已经使用的 shell 下运行一个新的shell,然后尝试显示 的值时FOO,我得到一个空白,因为FOO没有导出给子程序查看。然后我退出第二个bash实例,导出它,bash再次运行,现在第二个实例看到FOO.

您可以使用export,当你想分项目看在shell设置的值,当你不希望这样的事情发生不使用它。

通常,我不会在 shell 脚本中导出临时变量,因为我不希望它们更改从该 shell 脚本运行的程序的行为方式。

我不会回答你的任何其他问题。你一次只能问一个问题。我只回答了这么多,因为它们有模糊的关系。其他一切都属于一个单独的问题。