Функция bash, которая запускает скрипт
Я пытаюсь написать функцию bash с именем myrun
, такую, что выполнение
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?>
}
2 ответа:
Минималистская версия:
$ 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, то$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 }
Это не имеет отношения к Баш. К сожалению, строка shebang не может переносно содержать более одного аргумента или группы параметров.
Если ваша цель-указать параметры для Python, то простейшей вещью, вероятно, является простая оболочка
sh
:#!/bin/sh nohup python -u <<'____HERE' & .... Your Python script here ... ____HERE