2015-12-10 4 views
2

Я хочу, чтобы выполнить следующую команду в БашеКак запускать команды и получить выход в Баше

ruby ...... 

команда выводит строку «создавшее все» в случае успеха.

Как я могу запустить команду и проверить вывод для текста Created all things, чтобы убедиться, что он успешный, чтобы я мог запускать другие команды с помощью bash?

+0

Ваша команда должна иметь статус выхода 0, если все выполнено успешно, отличное от нуля, если нет, так что вам не нужно полагаться на какой-либо конкретный вывод. – chepner

+0

BTW, если единственный способ проверить, была ли ваша программа успешной, - читать ее вывод, тогда она была плохо написана. Хорошо организованная программа UNIX указывает на успешность или неудачу в статусе выхода. –

+0

... так что вы могли бы (если бы ваша рубиновая программа была хорошо себя вести): 'if ruby ​​....; затем эхо «Успех»; else echo "Failed"; fi', и не нужно, чтобы ваш сценарий оболочки смотрел на его вывод вообще. И если это не хорошо, то это жаловаться авторам. –

ответ

1

Вы можете сохранить вывод в переменной с помощью синтаксиса $(...), а затем делать регулярные проверки Баш как:

output=$(ruby ....) 
if [ "$output" = "Created all things" ]; then 
    # success, keep going 
else 
    # failure, clean up 
fi 

Учитывая Ваш комментарий о желании увидеть, если она закончилась с этой строкой, вы можете использовать Баш регулярное выражение вместо:

if [[ "$output" =~ Created\ all\ things$ ]]; then 
... 
+0

Проблема в том, что это не единственный выход, который он возвращает. Команда возвращает много другого результата, но в конце он возвращает «Создал все вещи» в случае успеха. Поэтому мне нужно регулярное выражение –

+0

@PotaOnasys см. Мое обновление, которое, мы надеемся, адресовано этому –

0

Подобно тому, что было написано Эрик, но это будет искать строку по всей продукции, а не только в конце.

results=$(ruby.......) 
if [[ $(echo ${results} | grep -c "Created all things") != "0" ]] ; then 
    echo "Command appears to be successful" 
else 
    echo "Command appears to have failed" 
fi