2016-10-26 2 views
0

Здравствуйте, я новичок в shell script и мне нужно обрабатывать error приходя из команды будучи excuted внутри echo как следующегосценария оболочки обрабатывать ошибку из команды будучи excuted от эха

echo -e "some internal command that I can't share \nq" | nc localhost 10000 

Я хочу сказать,

if [[ there's no error ]] 

ответ

0

попробовать

echo "YOUR SUPERSECRET COMMAND" | nc localhost 10000 | grep "Your expected error" 
if [[ $? -eq 0 ]]; then 
    echo "Do something useful with error" 
else 
    echo "Success" 
fi 

grep возвращает 0 соответствия и возвращает 1, если он не находит соответствия строки.

+0

Благодарим вас за ответ, но код состояния $? всегда 0, если есть ошибка или нет – Edevo

+0

@Rifai_deve Попробуйте это. –

0

Переменная оболочки $? предоставит вам код выхода. Таким образом, вы можете сделать:

echo -e "some internal command that I can't share \nq" | nc localhost 10000 
rc=$? 

if [[ $rc == 0 ]]; then 
    echo "success" 
fi 

или просто

if echo -e "some internal command that I can't share \nq" | nc localhost 10000; then 
    echo "success" 
fi 
+0

Благодарим вас за ответ, но код состояния $? всегда 0, если есть ошибка или нет – Edevo

+0

Если 'nc' всегда возвращает 0, то вы не можете много сделать. Но в моих немногих попытках он возвращает 1 при неудачах. Итак, как вы знаете, что это не удалось, когда он вернет 0? – usr

0

Вот краткий способ сделать это:

internalcommand &>/dev/null 2>&1 && echo OK || echo FAILED

Если internalcommand успешно OK будет выведено на стандартный вывод, если он терпит неудачу FAILED печатается.

Замечание, проверенное на Bash v4

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