2011-12-30 2 views
1

Сегодня, когда я проверил журнал сценария, я нашел команду (Unrar) Сбой («Program Aborted»), но не сообщил никаких ошибок,«Программа Отменено», но не возвращать код ошибки

это это мой отрывок из сценария:

unrar ...|tail -10 >> unrar.log #I found "Program Aborted" here 

if [[ "${?}" -ne "0" ]] 
then 
    echo "[ERROR] unrar application failed with $? errorcode" 
else 
    echo "[INFO] unrar application succeeded" 

Это из-за чего-то не в порядке с моим скриптом или самой системой?

ответ

4

$? переменная содержит статус выхода последней запущенной команды. В вашем случае это статус выхода команды «хвост», которая не сработала. В bash статус выхода, который вы ищете, находится в массиве PIPESTATUS. Вы можете выполнить итерацию по массиву, чтобы убедиться, что какая-либо из команд в последнем конвейере дала статус отсутствия нуля.

failed=false 
for status in "${PIPESTATUS[@]}"; do 
    if ((status != 0)); then 
     failed=true 
     break 
    fi 
done 

if $failed; then 
    echo "[ERROR] unrar application failed with $status errorcode" 
else 
    echo "[INFO] unrar application succeeded" 
fi 
+0

Отличный ответ, это помогает мне понять больше о том, как работает трубопровод, спасибо :) – erical

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