ユーザーがCTRL+Cを押して実行をキャンセルした場合でも、bashスクリプトの最後でいくつかのコマンドを実行したいと思います。
別のプログラミング言語(Pythonなど)内からbashスクリプトを実行できるので、「finally」(try-finally)ブロックを使用してコードを実行できます。
しかし、StackOverflowがすばらしいアイデアを交換するための中心であることを知っているので、bashスクリプト内からやりたいことを実行する方法があるかどうかを尋ねています。
それで、アイデア?
編集:
私が欲しいのは、bash内で開かれたすべてのプロセス、つまりセレンとXvfbプロセスを強制終了することです。
私はこれをコードに書いてみました:
trap "selenium_pids=$(ps ux | awk '/selenium/ && !/awk/ {print $2}');for pid in $selenium_pids; do kill -9 $pid;done; xvfb_pids=$(ps ux | awk '/Xvfb/ && !/awk/ {print $2}'); for pid in $xvfb_pids; do kill -9 $pid; done" EXIT
しかし、これにより、スクリプト内からサブプロセスを実行するたびに、次のように「CTRL+C」を何度も押す必要があります。
Testing nsi.bd.helpcenter ...^C: -- Total time: 0min 0seg
Testing nsi.bibliography ...^C: -- Total time: 0min 0seg
Testing nsi.digitallibrary ...^C: -- Total time: 0min 0seg
Testing nsi.digitallibraryinstaller ...^C: -- Total time: 0min 1seg
Testing nsi.digitallibraryskins ...^C: -- Total time: 0min 0seg
....#continues
次のように、トラップラインのファイナルをEXITからSIGINTに変更します。
trap "selenium_pids=$(ps ux | awk '/selenium/ && !/awk/ {print $2}');for pid in $selenium_pids; do kill -9 $pid;done; xvfb_pids=$(ps ux | awk '/Xvfb/ && !/awk/ {print $2}'); for pid in $xvfb_pids; do kill -9 $pid; done" SIGINT
同じことをします。
最初のCTRL+Cで何を終了しますか?
文字列の最後に「exit1」を追加しようとしたので、
trap "... ;exit 1"
最初のCTRL+Cで終了するように機能しましたが、必要なプロセスを強制終了しませんでした。
アイデア?