繁体   English   中英

为什么在bash脚本中嵌入repo命令?

[英]Why embed repo command in a bash script?

我正在调查repo(来自Android项目)的源代码。 它从以下开始:

#!/bin/sh
magic='--calling-python-from-/bin/sh--'
"""exec" python -E "$0" "$@" """#$magic"

如果我理解得很好,那就意味着脚本正在用python回忆起来。 所以有我的问题,为什么不直接使用python。

例如,我通常使用类似的东西:

#!/usr/bin/env python

我认为有一个很有价值的理由,但我无法弄清楚。

谢谢

Google开发人员Shawn Pearce在本次讨论中说明了原因:

我们需要传递-E标志,但某些平台上的env没有接受它。 所以我把这项工作搞定了。 它主要与谷歌的内部桌面有关; 他们有很多PYTHON环境标志我们不想继承到repo过程(因为它们适用于普通的谷歌工程师,而不是Android谷歌的工程师),至少在Mac OS或Linux上是环境的(我不记得是哪一个拒绝了“#!/ usr / bin / env python -E”的shbang系列。

Perl和Ruby有一个'-x'命令行开关,用于在启动interpeter之前设置shell环境变量 - 在同一个文件中混合shell命令和perl / ruby​​:

#!/bin/sh
export PERL5LIB=/some/perl/lib/path:$PERL5LIB
export FOO=1

exec perl -x $0 $@

# ^^^^ ---- shell commands above this line ---- ^^^^
#!perl
# vvvv ---- perl script below this line ---- vvvv
use strict;

print "Hello world\n":

回购中的“神奇”位是作者对这个问题的解决方案 - 但不那么灵活,而且更加迟钝。 令人遗憾的是,python中缺少一个功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM