スクリプトに行エラーがないか確認してください。

スクリプトに行エラーがないか確認してください。

私のスクリプトにエラーチェックソリューションを追加したいです。次のようになります。

! [ `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情報メッセージは通常、スクリプトの最後に配置されます。

関連情報