2014-01-22 2 views
0

Итак, это суть: у меня есть скрипт, который выполняет различные команды.проверить вывод команды в скрипте оболочки и прервать при необходимости

Одна из этих команд возвращает несколько протоколов, касающихся выполняемой операции. Я хотел бы перехватить этот журнал и остановить скрипт, если есть ошибка. Поскольку следующие операции в скрипте привязаны к успеху этой операции, нет смысла запускать весь скрипт, когда вы получаете ошибку на этом этапе.

Эта команда запускается на удаленном компьютере через ssh; идея заключалась бы в том, чтобы остановить скрипт, как только команда ssh завершится, и элемент управления вернется к сценарию

Есть ли простой способ проверить вывод команды, которая запущена в сценарии оболочки? Я мог бы перенаправить вывод в файл и проанализировать его, но это, похоже, добавляет много работы в скрипт; в то время как мне нужно вызвать выход только в случае ошибок в команде ssh.

Что вы предложите выполнить эту задачу?

ответ

2

Если команда завершается с кодом ошибки, когда есть ошибка, вы можете сделать что-то вроде этого:

if ! ssh somehost mycommand; then 
    echo "There was an error." 
    exit 1 
fi 

Если он не обеспечивает полезный код ошибки, то вам, вероятно, потребуется проверить выходные данные, используя что-то вроде:

if ssh somehost somecommand 2>&1 | grep error_message; then 
    echo "There was an error." 
    exit 1 
fi 

Они оба очень общие методы, и один или оба могут быть применимы к вашим потребностям.

+0

Большое значение. Команда не возвращает код ошибки грустно; поэтому я должен искать определенные ключевые слова, которые будут отображаться в журналах, которые показывают, что что-то пошло не так в удаленной операции и прервало скрипт. Большое спасибо, я попробую! –

+0

Работает частично; все в порядке, за исключением того, что в журналах я просто вижу напечатанную строку ошибки; в то время как мне нужно сохранить полный журнал, а не только строку ошибки. Таким образом, в основном команда запускается, печатает кучу строк журнала во время работы, и мне тоже нужно напечатать эти строки. Почему он печатает только строку ошибки? Потому что выход проходит через grep? –

+1

Это правильно - потому что мы передаем результат через grep, мы отфильтровываем все, что не соответствует. Если вам нужно сохранить * all * вывод, выгрузите его в файл, а затем файл 'grep'. – larsks

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