我试图写一个名为myrun
的bash函数,这样做
myrun script.py
使用Python文件:
#MYRUN:nohup python -u script.py &
import time
print 'Hello world'
time.sleep(2)
print 'Once again'
将使用在#MYRUN:
之后的文件第一行中指定的命令运行脚本。
我应该在.bashrc
中插入什么才能允许这样做?以下是我现在所拥有的内容:
myrun () {
[[ "$1" = "" ]] && echo "usage: myrun python_script.py" && return 0
<something with awk here or something else?>
}
答案 0 :(得分:1)
这与Bash无关。不幸的是,shebang行不能包含多个参数或选项组。
如果您的目标是为Python指定选项,最简单的事情可能是一个简单的sh
包装器:
#!/bin/sh
nohup python -u <<'____HERE' &
.... Your Python script here ...
____HERE
答案 1 :(得分:1)
极简主义版本:
$ function myrun {
[[ "$1" = "" ]] && echo "usage: myrun python_script.py" && return
local cmd=$(head -n 1 < "$1" | sed s'/# *MYRUN://')
$cmd
}
$ myrun script.py
appending output to nohup.out
$ cat nohup.out
Hello world
Once again
$
(我不清楚你是否最好在函数的最后一行使用eval "$cmd"
或简单$cmd
,但是如果你想在MYCMD中加入“&amp;”指令,然后$cmd
更简单。)
进行一些基本检查:
function myrun {
[[ "$1" = "" ]] && echo "usage: myrun python_script.py" && return
local cmd=$(head -n 1 <"$1")
if [[ $cmd =~ ^#MYRUN: ]] ; then cmd=${cmd#'#MYRUN:'}
else echo "myrun: #MYRUN: header not found" >&2 ; false; return ; fi
if [[ -z $cmd ]] ; then echo "myrun: no command specified" >&2 ; false; return; fi
$cmd # or eval "$cmd" if you prefer
}