Сохранить код завершения при использовании '$PROMPT_COMMAND'

У меня есть следующий код ( упрощенный для ясности), который вызывается $PROMPT_COMMAND после каждой команды:

function previous_command_status() 
{
    exit_code=$?;
    if [ $exit_code -eq 0 ]; then
        echo "Command successful"
    else
        echo "Command failed with exit code $exit_code"
    fi
}

Проблема, кажется, [ $exit_code -eq 0 ] Часть изменяет код завершения, поэтому я не могу использовать или сохранить код завершения после завершения выполнения команды. Например:

$ ./failing_script.sh
Command failed with exit code 255
$ echo $?;
1   # this is the exit code of the 'if' statement, not of 'bad'

Я не могу "передать значение", потому что, если я добавлю строку exit $exit_code внутри функции окно терминала закрывается немедленно.

Можно ли как-нибудь "сохранить" код завершения предыдущей команды или выполнить набор команд таким образом, чтобы они не изменяли значение выхода?

1 ответ

Решение

Вы не можете сохранить это. Даже если вы используете case заявления echo все равно изменил бы это. Однако вы можете положить его обратно с return:

exit_code=$?;
if [ $exit_code -eq 0 ]; then
    echo "Command successful"
else
    echo "Command failed with exit code $exit_code"
fi
return "$exit_code"

Однако вы можете использовать другую глобальную переменную для хранения кода.

Другие вопросы по тегам