我正在运行 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 …Run Code Online (Sandbox Code Playgroud)