Estoy ejecutando macOS High Sierra y encontré este comportamiento peculiar del sistema Python.
También lo /usr/bin/xattr
es un script de Python que imprime un mensaje de error inmediatamente y sale; y /usr/bin/xattr-2.7
es el que hace el verdadero trabajo de xattr.
Si ejecuto /usr/bin/xattr
or xattr
or /usr/bin/python /usr/bin/xattr
, todos se ejecutarán /usr/bin/xattr-2.7
en lugar de /usr/bin/xattr
. Tenga en cuenta que no hay forma de /usr/bin/xattr
redirigir el control a /usr/bin/xattr-2.7
. Imprime un mensaje de error inmediatamente.
Pero si cambio de directorio /usr/bin
y ejecuto /usr/bin/python ./xattr
o simplemente ./xattr
, ejecutarán el real /usr/bin/xattr
e imprimirán el mensaje de error.
Entonces me pregunto qué magia está involucrada aquí. Parece que el Python que viene preinstalado puede agregar el número de versión al script antes de ejecutar el que especifiqué.
Hacer un seguimiento:
Ejecutar Python desde diferentes ubicaciones también dará como resultado un comportamiento diferente
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.
He adjuntado ambos archivos aquí (https://gist.github.com/hotpxl/f16be705ac8b0cc6b7fbfe951cb68c7b)
Respuesta1
En MacOS, /usr/bin/python
no es un intérprete de Python, sino un programa llamado "versionador" que intentará seleccionar qué versión del intérprete de Python usar.
También hará trucos como buscar una secuencia de comandos cuyo nombre tenga un sufijo de versión de Python cuando se ejecuten secuencias de comandos desde ubicaciones especiales como /usr/bin
.
Esto está parcialmente documentado en elpágina de manual para Python en MacOS, aunque allí no se mencionan los detalles exactos de la búsqueda de scripts con el sufijo.
Ver tambiénesta publicación de blogque explora exactamente el mismo problema que está experimentando y tiene una explicación más detallada que incluye la inspección del binario "versionador" en busca de cadenas especiales.