Propósito del shebang #!/usr/bin/python3
He notado esto en un par de lenguajes de programación, pero en este ejemplo estoy usando Python. En muchos tutoriales, comenzarían #!/usr/bin/python3
en la primera línea. No entiendo por qué tenemos esto.
- ¿No debería saber el sistema operativo que es un script de Python (obviamente está instalado ya que estás haciendo referencia a él)?
- ¿Qué pasa si el usuario utiliza un sistema operativo que no está basado en Unix?
- El idioma está instalado en una carpeta diferente por cualquier motivo.
- El usuario tiene una versión diferente. Especialmente cuando no es un número de versión completo (como Python3 vs Python32)
En todo caso, podría ver que esto rompe el script de Python debido a las razones enumeradas anteriormente.
#!/usr/bin/python3
es una línea shebang .
Una línea shebang define dónde se encuentra el intérprete. En este caso, el python3
intérprete se encuentra en /usr/bin/python3
. Una línea shebang también podría ser un intérprete de , bash
o de cualquier otro lenguaje de programación, por ejemplo: .ruby
perl
#!/bin/bash
Sin la línea shebang, el sistema operativo no sabe que es un script de Python, incluso si configura el indicador de ejecución ( chmod +x script.py
) en el script y lo ejecuta como ./script.py
. Para que el script se ejecute de forma predeterminada en python3, invoquelo como python3 script.py
o establezca la línea shebang.
Puede utilizarlo #!/usr/bin/env python3
para portabilidad entre diferentes sistemas en caso de que tengan el intérprete de idiomas instalado en diferentes ubicaciones.
Eso se llama hash-bang. Si ejecuta el script desde el shell, inspeccionará la primera línea para determinar qué programa debe iniciarse para interpretar el script.
Un sistema operativo que no esté basado en Unix utilizará sus propias reglas para descubrir cómo ejecutar el script. Windows, por ejemplo, utilizará la extensión del nombre del archivo y #
hará que la primera línea se trate como un comentario.
Si la ruta al ejecutable de Python es incorrecta, entonces, naturalmente, el script fallará. Es fácil crear enlaces al ejecutable real desde cualquier ubicación especificada por convención estándar.