首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写一个bash脚本,它用python调用自己?

问如何编写一个bash脚本,它用python调用自己?
EN

Stack Overflow用户
提问于 2016-08-11 02:50:37
回答 3查看 141关注 0票数 1

有人能解释一下这个bash脚本是如何工作的吗?我不明白的部分是""":",这个语法在bash中意味着什么?

代码语言:javascript
复制
#!/bin/sh 

""":"

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

"""

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

测试运行结果:

代码语言:javascript
复制
$ ./callself.sh xx
called by bash
called by python, args: ['xx']


$ ./callself.sh
called by bash
called by python, args: []
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-11 02:56:38

这很聪明!在Bash中的中,""":"将被扩展为只有:,这是一个空命令(它什么都不做)。因此,接下来的几行将被执行,从而导致exec。此时,Bash不再存在,该文件由Python重新读取(其名称为$0),并转发原始参数。

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

在Python中,"""启动一个包含Bash命令的多行字符串,并扩展到关闭的"""。所以Python会跳到下面。

票数 2
EN

Stack Overflow用户

发布于 2016-08-11 03:00:58

这是多角化的一个示例,在该示例中,您在一个文件中编写多个编程语言,但仍然使其有效。

如何在python中有效?

代码语言:javascript
复制
""":"

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

"""

这是python中的多行docstring,所以python完全忽略它,直到import行

如何在bash中有效?

代码语言:javascript
复制
""":"

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

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

票数 1
EN

Stack Overflow用户

发布于 2016-08-11 03:02:28

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38886505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档