私のスクリプトにエラーチェックソリューションを追加したいです。次のようになります。
! [ `echo $?` != 0 ] || echo "omg, st went wrong, CTRL+C? `read`"
私の目標は、この行が実行されたときに「$?」をチェックすることです。 0以外の場合は、「OMG、stに問題が発生しました。CTRL + C?」と表示し、ユーザー入力またはCtrl + Cを待ちます。ただし、「OMG、stに問題が発生しました。CTRL + C?」を印刷する前に入力を待つため、1行ずつ機能しません。テキスト。誰もが私が何を逃しているのを助けることができますか?
ありがとうございます。
更新:次のようにstコマンドの後にこれを行うのが最善です。スクリプトに行エラーがないか確認してください。
「悪いコマンド」は「uname -k」です。良いコマンドは「echo hi」です。 uname は 0 以外の終了コードを提供し、echo は 0 を提供します。
答え1
これは正しいです。`read`
実行され、結果がに送信される文字列に挿入されますecho
。
これらすべての補間法などを使用すると、実行する方法は非常に困難です。
if [[ $? -ne 0 ]]; then
echo -n 'command failed. ^C or "q" to abort.'
read c
[[ "$c" == q ]] && exit
fi
答え2
解決策を得ました。
$ 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
$
更新:そうです、テキストを印刷した後は入力を待ちません。 \
答え3
長い間実行されるスクリプトを書くときは、ポップアップウィンドウを介して警告を受け取ることを好みます。たとえばZenでいっぱい
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情報メッセージは通常、スクリプトの最後に配置されます。