OSX 终端搜索目录

OSX 终端搜索目录

我以前在 Windows 上使用 cygwin,现在刚开始使用 Mac。我想知道为什么搜索路径似乎不能正常工作。

如果我有一个程序,/usr/bin/prog然后我将其删除。它似乎会继续尝试该确切路径,而不是再次搜索它(假设我将其移动到/usr/local/bin)。

这是由于终端应用程序引起的,还是 Mac 独有的?另外,如果我想将新版本的 Python 安装到 中/usr/local/bin,正确的方法是将其从 中删除/usr/bin/吗?

答案1

虽然您的问题带有 标记,但您没有说明您使用的是哪个 shell bash默认的 Mac OS X shell 是tcshrehash如果您使用的是 tcsh 或 csh,它们会缓存您路径上的项目表。为了刷新表格,请在 shell 提示符下 发出命令。

每当您移动或删除可执行文件,或者在路径中添加某些内容时,都需要执行此操作。

如果您确实正在使用bashshell,那么这并不适用。

答案2

OS X 终端将按顺序尝试 PATH 变量中声明的路径,直到找到它或没有地方可以检查。您可以在命令提示符下输入以下内容来检查 PATH 变量是什么:

echo $PATH

您可以从命令提示符运行以下命令来查看您的 shell 在哪里找到相关程序:

which prog

如果要升级 Python,我建议将其安装到与现有位置相同的位置。如果您想一次在计算机上安装多个版本,那么将其安装在 /usr/local/bin 中在我看来是一个合理的选择。

答案3

据我所知,当您执行程序时,它将搜索 $PATH 变量中的文件夹,这些文件夹以“:”分隔,例如。

/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin

你的 $PATH 设置正确吗?要找出原因,请使用:

echo $PATH

您还可以使用哪个python 查找其运行的版本和位置。我相信这也是从左到右的搜索,因此它将采用在路径上找到的第一个名为 python 的程序。

答案4

而不是使用

which prog

你可以使用 Bash 内置

type -P prog

# some examples using: type -P cmd
$(type -P prog) arg1 arg2 arg3 ...
myls=$(type -P ls) && $myls -l

有关详细信息,请参阅

help type

# The -P flag forces a PATH search for each NAME, even if it is an alias,
# builtin, or function, and returns the name of the disk file that would
# be executed.

另一个选择可能是尝试

help command
command -p prog

高血压

相关内容