2012-03-26 3 views
1

По существу у меня есть скрипт, который действует как оболочка задачи и отправляет электронное письмо пользователю, если задача не выполняется.Bash exec wrapper script - несколько команд, переданных в качестве аргументов

Задача передается в качестве аргумента скрипту. Проблема возникает, когда нам нужно запустить несколько команд, так как следующая строка передается скрипту, так как задача arg "echo this; echo that" выводит ; эхо, что.

Итак, вопрос заключается в том, что является самым простым способом запуска нескольких команд без необходимости прокручивать входную командную строку и разбивать на ';' обугливается?

Простой пример:

FIRST=$1 
TASK=$* 
echo run 
echo "emailing $FIRST" 
$TASK 
echo done 

и запустить этот сценарий мы использовали бы ./wrapper.sh "[email protected]" "echo this; echo that"

предложения?

ответ

3

Если выполнить строковое $TASK через sh -c, вы, возможно, не нужно делать больше работы:

$ sh -c "echo this ; echo that" 
this 
that 
$ 
+0

спасибо - есть в любом случае, чтобы получить возвращаемое значение, если любая команда в командной строке не удается. Скажем «эхо это: dsddsdsd; echo that», средняя команда не сработает (не найдена) еще $? будет по-прежнему 0, так как эхо будет успешным. Поэтому вопрос заключается в использовании sh. Я могу остановить сбой с помощью ключа -e, но могу ли я запускать каждую команду, чтобы возвращать любые ненулевые ошибки (Im догадывается, но не стоит делать снимок). – NightWolf

+1

Хмм, я не могу придумать какой-либо простой механизм для этого; можете ли вы вместо этого изменить свой скрипт, чтобы принимать несколько команд в виде нескольких аргументов? например 'wrapper.sh alert @ hostname" echo this "" echo that "'? – sarnold

Смежные вопросы