如何编写一个用python调用自身的bash脚本?
有人能解释一下这个bash脚本是如何工作的吗?我不理解的部分是:“”,这个语法在bash中是什么意思如何编写一个用python调用自身的bash脚本?,python,linux,bash,shell,sh,Python,Linux,Bash,Shell,Sh,有人能解释一下这个bash脚本是如何工作的吗?我不理解的部分是:“”,这个语法在bash中是什么意思 #!/bin/sh """:" echo called by bash exec python $0 ${1+"$@"} """ import sys print 'called by python, args:',sys.argv[1:] 试运行结果: $ ./callself.sh xx called by bash called by python, args: ['xx']
#!/bin/sh
""":"
echo called by bash
exec python $0 ${1+"$@"}
"""
import sys
print 'called by python, args:',sys.argv[1:]
试运行结果:
$ ./callself.sh xx
called by bash
called by python, args: ['xx']
$ ./callself.sh
called by bash
called by python, args: []
真聪明在Bash中,
“:”
将仅扩展为:
,这是空命令(它不做任何事情)。因此,接下来的几行将被执行,导致exec
。此时,Bash不再存在,Python将重新读取该文件(其名称为$0
),并转发原始参数
${1+“$@”}
的意思是:如果定义了$1
,则作为参数“$@”
传递,这些参数是原始Bash脚本参数。如果未定义$1
,表示Bash没有参数,则结果为空,因此不会传递任何其他内容,即使是空字符串
在Python中,“
启动一个多行字符串,其中包括Bash命令,并扩展到结尾的”
。因此Python将跳到下面。这是一个例子,在一个文件中编写多种编程语言,但仍然使其有效
它在python中如何有效
""":"
echo called by bash
exec python $0 ${1+"$@"}
"""
这是python中的一个多行docstring,因此python完全忽略它,直到import
行
它在bash中如何有效
""":"
echo called by bash
exec python $0 ${1+"$@"}
exec
使用python解释器调用相同的脚本并退出脚本。因此,它不会执行其余语法错误的python语句。
此外,一旦调用了exec,其余的代码就不会执行,因为exec将用程序(在本例中是python进程)替换shell。()