¿Por qué este script de shell se llama a sí mismo como script python?

Obviamente, este script de shell se llama a sí mismo como un script de Python:

#!/bin/sh ## repo default configuration ## REPO_URL='git://android.git.kernel.org/tools/repo.git' REPO_REV='stable' magic='--calling-python-from-/bin/sh--' """exec" python -E "$0" "$@" """#$magic" if __name__ == '__main__': import sys if sys.argv[-1] == '#%s' % magic: del sys.argv[-1] del magic : : 

(Script completo: https://android.googlesource.com/tools/repo/+/v1.0/repo )

¿Puede alguien explicar

  • El propósito de llamarla así?
    ¿Por qué no tener #!/usr/bin/env python en la primera línea por lo que se interpreta como script Python desde el principio?

  • El propósito de agregar ese argumento de la última línea de comandos mágico, que se elimina después en el principio del código de Python?

Su primera pregunta: esto se hace para arreglar sistemas unix (o emulaciones de los mismos) que no manejan el #! Correctamente o en absoluto. El arte de alta es hacer un guión que es correcto en shell, así como en el otro idioma. Para perl, a menudo se ve algo como:

 exec "/usr/bin/perl" if 0; 

El exec es interpretado y ejecutado por el shell, pero el intérprete perl ve una sentencia condicional (…. si …) y no hace nada porque la condición es falsa.

  • Android python integración completa
  • Ejecución de hello.py desde un proceso Android
  • Desarrollo de Android en Python Realistic
  • ¿Puedo escribir aplicaciones nativas de iPhone, Android, Windows y Blackberry con Python?
  • ¿Cómo subir el archivo en el servidor django usando phonegap?
  • Copie los archivos MTP de Android usando linux terminal o python; Error Operación no soportada
  • ¿Por qué Google eligió Java para el sistema operativo Android?
  • Comunicación de socket con Python en Android
  • Ejecución de un teléfono Android como un servidor web estable (para una secuencia de comandos CGI de Python)
  • Error de compilación de Android con buildozer
  • Google Cloud Endpoints Cliente Android: error de autenticación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.