私はDebianとLinuxでbashスクリプトを頻繁に実行します。
私たちは皆、CTRL + Cキーの組み合わせが現在のプログラムを中断して実行可能ファイル/スクリプトを閉じることができることを知っていますが、このキーストロークはバッチ/スクリプトを完全に終了します。
私が探しているのはキーストロークです非常に実用的な段落に対してのみスキップ(入れ子になったCTRL + Cなど)段落を実行しなくても、forループの「break」や「continue」と同様にエラー条件が発生します。
スクリプト例:
デモファイル
wget http://something_from_the_internet...
unzip that_file
ping my_host
4th passage...
5th passage...
キーの組み合わせを押して2番目のコマンド(この場合は解凍)に移動するか、2回押して3番目のコマンド(この場合はping ...)に直接移動します。
多くの場合、スクリプトファイルの結果はすべての段落によって提供されます。しかし、私の場合はそうではありません。テスト目的でこれらの組み合わせを使用すると、上部のすべての行にコメントを付けることなくコンテンツを実行してテストできます。一番下の最新情報を簡単に見てください。
答え1
答え2
SIGINT
Bashの内蔵機能を使用して、選択的に信号を取り込むことができますtrap
。
trap [COMMANDS] [SIGNALS]
たとえば、SIGINT
フォアグラウンドスクリプトに送信された信号をキャプチャして、スクリプトによって生成されたプロセスに信号を送信できます。
ただし、この場合はフォークされたプロセスのPIDが必要です。 Bashの変数を使用できますが、$!
これはバックグラウンドに分岐したプロセスでのみ機能します。
回避策としてスクリプトの同期特性を維持するには、wait
返されたPIDを明示的に呼び出すことができます。
#!/usr/bin/env bash
function skip() {
kill -SIGTERM $!
}
trap skip SIGINT
ping ... &
wait $!
wget ... &
wait $!
unzip ... &
wait $!