Я хочу добавить в свой сценарий решение для проверки ошибок, оно выглядит так:
! [ `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
Это правильно; будет выполнено `read`
и результат интерполирован в строку, отправленную в echo
.
Вы делаете это очень сложным способом, со всеми этими интерполяциями и прочим.
if [[ $? -ne 0 ]]; then
echo -n 'command failed. ^C or "q" to abort.'
read c
[[ "$c" == q ]] && exit
fi
Когда я напишите возможно долго работающие скрипты; Я предпочитаю получать предупреждение во всплывающем окне. Например. 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 обычно помещается в конец скрипта.
нашел решение:
$ 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: упс, он не ждет ввода после печати текста :\