いくつかのディレクトリを rsync しています。bash ターミナルを開いて、次のようなコマンドを実行しています。
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
ただし、すべてを停止したい場合は、Control-C を押します。これにより rsync は停止しますが、次の rsync に進みます。この場合、何が起こったのかを認識し、再び機能するまで狂ったように Control-C を押します。
これを「修正」する方法はありますか。このようなループがある場合に、Control-C を押すと、bash シェルに戻るようにしたいです。
答え1
for DIR in * ; do rsync -a $DIR example.com:somewhere/ || break; done
何らかの理由で個々の rsync 実行が失敗した場合も、ループが終了します。
答え2
Dennis の回答を拡張すると、コードは次のようになります。
trap "echo Exited!; exit;" SIGINT SIGTERM
実際の例(rsyncを含む)については、以下を参照してください。出典: http://www.github.com/279849。
答え3
Control-C にトラップを設定できます。
trap <command> SIGINT
command
Control-C が押されたときに が実行されます。trap
スクリプト内の、有効にしたい場所にステートメントを配置するだけです。
答え4
括弧内にコマンドの文字列を入力すると、その文字列は単一のプロセスとして動作し、Ctrl-を押すと SIGINT を受信して終了しますC。
(for DIR in * ; do rsync -a "$DIR" example.com:somewhere/ ; done)
しかし、コマンドの場合はrsync
複数のソースが許可されるため、記述したコードは次のように記述した方がよいでしょう。
rsync -a * example.com:somewhere/