我们可以使用wget、curl命令或者从网络上下载repo的引导脚本(bootstrap)。然后把repo脚本设置为可执行,并放到可执行的路径中。这里的repo引导脚本只是一个帮助完成整个repo程序继续下载和加载的工具。下面来看看repo引导脚本的工作流程。
repo脚本是作为整个repo工具的入口,只要负责repo环境的初始化和克隆repo库。repo有两处if __name== ‘__main__’,位于开始部分主要是给Shell执行用的,位于末尾的部分是给Python执行用的。
来看看repo引导脚本的前几行。
1 #!/bin/sh
2
3 REPO_URL='git://android.git.kernel.org/tools/repo.git'
4 REPO_REV='stable'
5
6 magic='--calling-python-from-/bin/sh--'
7 """exec"python -E "$0" "$@" """#$magic"
8 if __name__ == '__main__':
9 import sys
10 if sys.argv[-1] == '#%s' % magic:
11 delsys.argv[-1]
12 del magic
从第1行可以看出,这个脚本是用Shell脚本写的。第7行既是一条合法的Shell语句,又是一条合法的Python语句。如果作为Shell语句,执行exec,用Python调用本脚本,并替换本进程。三引号在这里相当于一个空字符串和一个单独的引号。如果作为Python语句,三引号定义的是一个字符串,字符串后面是一个注释。实际上第1行到第7行,既是合法的Shell语