我正在运行 macOS High Sierra 并发现系统 Python 的这种古怪行为。
所以/usr/bin/xattr是立即退出打印错误消息的Python脚本; 并且/usr/bin/xattr-2.7是真正的 xattr 工作。
如果我运行/usr/bin/xattr或xattr或者/usr/bin/python /usr/bin/xattr,它们都将运行/usr/bin/xattr-2.7,而不是/usr/bin/xattr。请注意,无法/usr/bin/xattr将控制重定向到/usr/bin/xattr-2.7. 它立即打印错误消息。
但是如果我将目录更改为/usr/bin并运行/usr/bin/python ./xattr或只是./xattr,他们将运行真实/usr/bin/xattr并打印错误消息。
所以我想知道这里涉及到什么魔法。感觉就像预装的 Python 能够在执行我指定的脚本之前将版本号附加到脚本。
跟进:
从不同位置运行 Python 也会导致不同的行为
bash-3.2$ cd /usr/bin
bash-3.2$ ./python /usr/bin/xattr
bash-3.2$ cp python /tmp
bash-3.2$ cd /tmp
bash-3.2$ ./python /usr/bin/xattr
python version 2.7.10 can't run /usr/bin/xattr. Try the alternative(s):
/usr/bin/xattr-2.7 (uses python 2.7)
Run "man python" for more information about multiple version support in
Mac OS X.
Run Code Online (Sandbox Code Playgroud)
我在这里附上了这两个文件(https://gist.github.com/hotpxl/f16be705ac8b0cc6b7fbfe951cb68c7b)
在 MacOS 中,/usr/bin/python它不是 Python 解释器,而是一个名为“versioner”的程序,它会尝试选择使用哪个版本的 Python 解释器。
它还会执行一些技巧,例如在从特殊位置(例如/usr/bin.
这部分记录在MacOS 中 python的手册页中,尽管那里没有提到寻找带有后缀的脚本的确切细节。
另请参阅此博客文章,它探讨了您遇到的完全相同的问题,并提供了更深入的解释,包括检查“versioner”二进制文件以查找特殊字符串。
| 归档时间: |
|
| 查看次数: |
515 次 |
| 最近记录: |