Убедитесь, что в скрипте есть однострочная ошибка.

Я хочу добавить в свой сценарий решение для проверки ошибок, оно выглядит так:

! [ `echo $?` != 0 ] || echo "omg, st went wrong, CTRL+C? `read`"

Моя цель - когда эта строка запускается, она проверяет "$?" - если это не 0, то будет написано "omg, st пошла не так, CTRL + C?" затем он ждет ввода или CTRL + C от пользователя. Но мой однострочник не работает, потому что он ждет ввода, прежде чем печатать "omg, st пошла не так, CTRL + C?" текст. Может кто-нибудь помочь мне, что мне не хватает?

Спасибо.

ОБНОВЛЕНИЕ: было бы лучше сделать это после команды st как в: Убедитесь, что в скрипте была однострочная ошибка.

«плохая команда» - «uname -k» хорошая команда "echo hi" - uname дает ненулевой код выхода, эхо дает 0

1
13.04.2017, 15:36
3 ответа

Это правильно; будет выполнено `read` и результат интерполирован в строку, отправленную в echo.

Вы делаете это очень сложным способом, со всеми этими интерполяциями и прочим.

if [[ $? -ne 0 ]]; then
    echo -n 'command failed.  ^C or "q" to abort.'
    read c
    [[ "$c" == q ]] && exit
fi
2
29.04.2021, 00:59

Когда я напишите возможно долго работающие скрипты; Я предпочитаю получать предупреждение во всплывающем окне. Например. with zenity

if [[ $? -ne 0 ]]; then
    if  zenity --question --text="Omg, something went wrong, do you wish to continue?"; then
    echo continue with program
    else
    echo "exiting" && exit; 
    fi
fi

Таким образом, я могу выполнять другую работу и получать уведомления, если что-то сломается. Кроме того, информационное сообщение zenity обычно помещается в конец скрипта.

0
29.04.2021, 00:59

нашел решение:

$ uname -k || echo 'omg, fail' || read
uname: invalid option -- 'k'
Try `uname --help' for more information.
omg, fail
$ echo hi || echo 'omg, fail' || read
hi
$ 

UPDATE: упс, он не ждет ввода после печати текста :\

0
29.04.2021, 00:59

Теги

Похожие вопросы