显然这个 shell 脚本将自己称为 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 代码的开头被删除了?
最佳答案
您的第一个问题:这样做是为了修复不处理 #!正确地或根本没有。高级艺术是制作一个在 shell 和其他语言中都正确的脚本。对于 perl,人们经常看到这样的东西:
exec "/usr/bin/perl"
if 0;
exec 由 shell 解释和执行,但是 perl 解释器看到一个条件语句 (.... if ...) 并且什么都不做,因为条件为假。
关于android - 为什么这个 shell 脚本将自己称为 python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5565340/