我以前在 Windows 上使用 cygwin,现在刚开始使用 Mac。我想知道为什么搜索路径似乎不能正常工作。
如果我有一个程序,/usr/bin/prog
然后我将其删除。它似乎会继续尝试该确切路径,而不是再次搜索它(假设我将其移动到/usr/local/bin
)。
这是由于终端应用程序引起的,还是 Mac 独有的?另外,如果我想将新版本的 Python 安装到 中/usr/local/bin
,正确的方法是将其从 中删除/usr/bin/
吗?
答案1
虽然您的问题带有 标记,但您没有说明您使用的是哪个 shell bash
。 默认的 Mac OS X shell 是tcsh
,rehash
如果您使用的是 tcsh 或 csh,它们会缓存您路径上的项目表。为了刷新表格,请在 shell 提示符下 发出命令。
每当您移动或删除可执行文件,或者在路径中添加某些内容时,都需要执行此操作。
如果您确实正在使用bash
shell,那么这并不适用。
答案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
高血压