<p>这个文件可以作为shell脚本<em>和</em>Python脚本执行。注意shebang是<code>#!/bin/sh</code>,因此脚本首先要作为shell脚本运行。(我忽略了<code>-</code>参数,它表示<code>sh</code>应该从标准输入而不是文件中读取。我不太清楚它在这里有什么意义,因为我从来没有见过一个舍邦是这样写的。)</p>
<p>预期的调用类似于<code>./pox.py ...</code>或{<cd5>}</p>
<p>脚本的第一行是<code>''''true</code>,在删除引号之后,它与<code>true</code>相同,因此命令运行并且除了成功退出之外什么都不做。以下几行是确定使用哪个Python解释器以及传递给调用的选项的有效命令。三个<code>exec</code>命令之一</p>
<ol>
<li><code>exec pypy/bin/pypy $OPT "$0" $FLG "$@"</code></li>
<li><code>exec python2.7 $OPT "$0" $FLG "$@"</code></li>
<li><code>exec python $OPT "$0" $FLG "$@"</code></li>
</ol>
<p>然后将执行与Python脚本相同的文件,因此shell永远看不到以第二个<code>'''</code>开头的行(这很好,因为第一个<code>'</code>开头的单词既没有以最后一个结束符<code>'</code>终止,如果字符串的<em>被</em>终止,则它也不是有效的命令)。<code>"$0"</code>是当前文件的名称,<code>"$@"</code>表示脚本的参数(除了传递给Python脚本之外,shell脚本将忽略这些参数,如下所示)。在</p>
<p>一旦脚本作为Python脚本运行,以<code>''''true</code>开头的行将被简单地视为将被忽略的doc字符串的开头。Python脚本本身就是</p>
<pre><code>from pox.boot import boot
if __name__ == '__main__':
boot()
</code></pre>
<p>为什么这一切都要从<code>''''true</code>开始?作为shell脚本,需要有偶数个引号来平衡彼此。但是,<code>''''</code>本身就是一个空字符串,shell会尝试将其视为命令,并且没有任何命令的名称是空字符串。<code>''''true</code>但是,确实会产生一个有效的命令。在</p>