如何写一个bash脚本与蟒蛇自称?(How to write a bash script which

2019-09-29 17:46发布

有人可以解释这个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: []

Answer 1:

这就是聪明! 在bash中 """:"将扩大到只有: ,这是空的命令(它没有做任何事情)。 所以,在接下来的几行会被执行,导致exec 。 在这一点上,击不再存在 ,并且通过Python中的文件重新读取(它的名字是$0 ),和原来的参数被转发。

${1+"$@"}意味着:如果$1被定义,作为参数传递"$@"这是原始bash脚本参数。 如果$1没有定义,这意味着猛砸没有争论,结果是空的,所以没有别的传递,甚至不是空字符串。

在Python中"""开始多行字符串,其中包括击命令,并且向上延伸至闭合""" 。 所以Python会直接跳到下面。



Answer 2:

这是一个例子通晓多国语言 ,你写在一个文件中的多个编程语言,仍然使其有效。

它是如何在python有效

""":"

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

"""

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

它是如何在bash有效

""":"

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

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



Answer 3:

什么是目的:(冒号)GNU Bash的内建?

此外,一旦EXEC被调用时,不执行代码的其余部分,因为EXEC替换程序的外壳,在这种情况下,Python进程。 ( http://wiki.bash-hackers.org/commands/builtin/exec )



文章来源: How to write a bash script which calls itself with python?