如何编写一个用python调用自身的bash脚本?

时间:2016-08-11 02:50:38

标签: python linux bash shell sh

有人可以解释这个bash脚本是如何工作的吗?我不理解的部分是<tbody> <tr> <td></td> <td></td> </tr> <tr> <td>User sign:</td> <td class="signLabel">Here:------------------</td> </tr> <tr> <td></td> <td></td> </tr> </tbody> ,这个语法在bash中意味着什么?

""":"

测试运行结果:

#!/bin/sh 

""":"

echo called by bash
exec python $0 ${1+"$@"}

"""

import sys
print 'called by python, args:',sys.argv[1:]

3 个答案:

答案 0 :(得分:2)

那很聪明! 在Bash 中,""":"将仅展开为:,这是空命令(它不做任何事情)。因此,接下来的几行将被执行,导致exec。此时,Bash 不再存在,并且Python重新读取该文件(其名称为$0),并转发原始参数。

${1+"$@"}表示:如果定义了$1,则传递参数"$@",这是原始的Bash脚本参数。如果没有定义$1,意味着Bash没有参数,结果是空的,所以没有传递任何其他内容,甚至没有空字符串。

在Python 中,"""启动一个多行字符串,其中包含Bash命令,并一直延伸到结束"""。所以Python会跳到下面。

答案 1 :(得分:1)

这是polyglot的示例,您可以在文件中编写多种编程语言并使其有效。

如何在python中有效

""":"

echo called by bash
exec python $0 ${1+"$@"}

"""

这是python中的多行文档字符串,所以python完全忽略它直到import

如何在bash中有效

""":"

echo called by bash
exec python $0 ${1+"$@"}

exec使用python解释器调用相同的脚本并退出脚本。所以它不会执行剩余的语法错误的python语句。

答案 2 :(得分:0)

What is the purpose of the : (colon) GNU Bash builtin?

此外,一旦调用了exec,其余代码就不会被执行,因为exec用程序替换了shell,在本例中是python进程。 (http://wiki.bash-hackers.org/commands/builtin/exec