Cur*_*urd 12 python android sh
显然,这个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
:
:
Run Code Online (Sandbox Code Playgroud)
(整个脚本:https://android.googlesource.com/tools/repo/+/v1.0/repo)
谁能解释一下
这样称呼的目的是什么?
为什么不在#!/usr/bin/env python
第一行,所以它从一开始就被解释为Python脚本?
添加那个魔术最后命令行参数的目的,后来在Python代码的开头删除了吗?
您的第一个问题:这是为了修复不处理#的unix系统(或其仿真)!正确或根本没有.高级艺术是制作一个在shell和其他语言中都正确的脚本.对于perl,人们常常看到类似的东西:
exec "/usr/bin/perl"
if 0;
Run Code Online (Sandbox Code Playgroud)
exec由shell解释和执行,但perl解释器看到条件语句(.... if ...)并且什么也不做,因为条件是假的.