有人可以解释这个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']
$ ./callself.sh
called by bash
called by python, args: []
这就是聪明! 在bash中 """:"
将扩大到只有:
,这是空的命令(它没有做任何事情)。 所以,在接下来的几行会被执行,导致exec
。 在这一点上,击不再存在 ,并且通过Python中的文件重新读取(它的名字是$0
),和原来的参数被转发。
的${1+"$@"}
意味着:如果$1
被定义,作为参数传递"$@"
这是原始bash脚本参数。 如果$1
没有定义,这意味着猛砸没有争论,结果是空的,所以没有别的传递,甚至不是空字符串。
在Python中 , """
开始多行字符串,其中包括击命令,并且向上延伸至闭合"""
。 所以Python会直接跳到下面。
这是一个例子通晓多国语言 ,你写在一个文件中的多个编程语言,仍然使其有效。
它是如何在python有效
""":"
echo called by bash
exec python $0 ${1+"$@"}
"""
这是Python中的多文档字符串所以Python完全忽略它,直到import
线
它是如何在bash有效
""":"
echo called by bash
exec python $0 ${1+"$@"}
该exec
称使用Python解释器相同的脚本,并退出该脚本。 所以它不会执行剩余的语法错误的Python语句。
什么是目的:(冒号)GNU Bash的内建?
此外,一旦EXEC被调用时,不执行代码的其余部分,因为EXEC替换程序的外壳,在这种情况下,Python进程。 ( http://wiki.bash-hackers.org/commands/builtin/exec )