Я использую 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
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.
Я прикрепил оба файла здесь (https://gist.github.com/hotpxl/f16be705ac8b0cc6b7fbfe951cb68c7b)