Почему этот сценарий оболочки вызывает себя как сценарий python?

Очевидно, этот сценарий оболочки вызывает себя как сценарий 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
:
:

(Весь сценарий: https://android.googlesource.com/tools/ repo / + / v1.0 / repo )

Может ли кто-нибудь объяснить

  • цель такого вызова?
    Почему бы не указать #! / Usr / bin / env python в первой строке, чтобы он интерпретировался как сценарий Python с самого начала?

  • цель добавления этого волшебного последнего аргумента командной строки, который впоследствии удаляется в начале кода Python?

12
задан Vadim Kotov 24 July 2017 в 10:43
поделиться