GNU/Linux >> Linux の 問題 >  >> Linux

Bash ループ - コマンド内で Control-C を押したときにループを停止するには?

解決策 1:

for DIR in * ; do rsync -a $DIR example.com:somewhere/ || break; done

これは、個々の rsync の実行が何らかの理由で失敗した場合にもループを終了します。

解決策 2:

Dennis の回答を拡張すると、コードは次のようになります。

trap "echo Exited!; exit;" SIGINT SIGTERM

実際の例 (たまたま rsync が関係しています) については、http://gist.github.com/279849 を参照してください。

解決策 3:

Control-C のトラップを設定できます。

trap <command> SIGINT

command を実行します Control-C が押されたとき。 trap を入れるだけです スクリプト内のどこかで、それを有効にしたい場所にステートメントを挿入してください。

解決策 4:

<オール>
  • Ctrl-Zを押してください スクリプトを一時停止します。
  • kill %%
  • この回答のクレジット、説明、および詳細。

    解決策 5:

    コマンドの文字列を括弧内に入れると、文字列は単一のプロセスとして機能し、SIGINT を受け取り、Ctrl を押すと終了します。 -C :

    (for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done)
    

    しかし! rsyncの場合 コマンドを使用すると、複数のソースが許可されるため、記述したコードは次のように記述したほうがよいでしょう:

    rsync -a * example.com:somewhere/
    

    Linux
    1. ターミナルでループバッシュスクリプトを停止する方法は?

    2. 一部のBashインスタンス内で実行されている正確なコマンドラインを確認するにはどうすればよいですか?

    3. Rsyncコマンドをスケジュールする方法は?

    1. LinuxでRsyncコマンドを使用するにはどうすればよいですか?

    2. 前の bash コマンドの引数を思い出すにはどうすればよいですか?

    3. bashでループの終了ステータスを取得する方法

    1. Bashコマンドの最初の単語をすばやく変更するには?

    2. bashコマンド文字列の逐語的な文字を確認するにはどうすればよいですか?

    3. SSH - ~/.ssh/config ファイルに -t コマンドを含める方法