Hacemos una verificación exhaustiva cada artículo en nuestro espacio con el objetivo de enseñarte siempre la información certera y actual.
Solución:
Eso es porque env
esta buscando python
en tus PATH
, no en ningún shell incorporado, alias o función. como has definido python
como python3
como un alias, env
no lo encontrará, lo buscará PATH
y resolverá python
a /usr/bin/python
(cual es python2
).
Puede comprobar todas las ubicaciones disponibles del ejecutable python
en bash
hacer:
type -a python
No tiene suerte si quiere usar un alias en shebang porque, por definición, shebang debe ser una ruta completa al ejecutable del intérprete, que es el env
debería resolver python
a cuando usas /usr/bin/env python
. Para interpretar el script usando python3
usa el tinglado:
#!/usr/bin/env python3
Dada la cantidad de secuencias de comandos que llaman a /usr/bin/env python esperando a python 2, probablemente sea una mala idea tener python en realidad python 3.
Como dijo Benny en un comentario, /usr/bin/env python3
es la solución correcta.
Encontré una mejor solución que las publicadas aquí: http://redsymbol.net/articles/env-and-python-scripts-version/
La idea básica es poner un nombre de enlace simbólico python a python3 en algún otro directorio con un nombre inteligente y luego poner ese directorio al comienzo de $PATH para que se encuentre antes que el que está en /usr/bin.
Asi que:
mkdir ~/bin/env_python3/
ln -s /usr/bin/python3 ~/bin/env_python3/python
$PATH = ~/bin/env_python3/:$PATH ./script.py
Al usar esta solución, no vincula /usr/bin/python a python3 y rompe los scripts que asumen que es python 2 y tampoco tiene que editar el script que descargó de otra persona.
Sección de Reseñas y Valoraciones
Si estás contento con lo expuesto, tienes la opción de dejar una noticia acerca de qué te ha impresionado de este post.