如何编写用python调用自己的bash脚本?

2024-09-30 00:37:58 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下这个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: []

Tags: importecho脚本bashbybinshsys
3条回答

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

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

这是polyglot的一个例子,在这个例子中,您在一个文件中编写了多种编程语言,但仍然使其有效。你知道吗

它在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语句。你知道吗

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

${1+"$@"}意味着:如果定义了$1,则传递为参数"$@",这是Bash脚本的原始参数。如果$1没有定义,这意味着Bash没有参数,那么结果是空的,因此不会传递其他内容,甚至空字符串也不会传递。你知道吗

在Python中,"""启动一个包含Bash命令的多行字符串,并一直扩展到结束的"""。所以Python会跳到下面。你知道吗

相关问题 更多 >

    热门问题