bashでforループを破るが、繰り返しが完了した後にのみ可能ですか?

bashでforループを破るが、繰り返しが完了した後にのみ可能ですか?

中断/停止する方法はありますか?~のため-loop bash、しかし後ろに現在の繰り返しが完了しました。 「サイ」完璧そしてする

~のため- 1つのコマンドを使用して複数のディレクトリを繰り返すことは、完了が許可されていない限り破壊的である可能性があります。したがって、あるディレクトリが完了し、次のディレクトリが起動する前にコマンドを停止したいと思います。

sleep(はい、以前またはreadコマンドを追加できることを知っています。完璧- しかし、私いいえ、ループはすでに実行中です...)

答え1

~のためすでに実行中: コマンドが次のようになるとします。プログラムだから子供の頃に走ったプロセススクリプト(またはその一部)を実行するシェルの下でそしてスクリプトは入力のためにheredocまたはherestringを提供しません。またはその入力を読み込んだり、少なくともバッファリングして停止したりできます。〜の後プロセス終わる通過:

  • kill -STOPシェル(だから何もしません。後ろに現在のコマンド)
  • 子プロセスが完了してゾンビ状態になるまで待ちます。
  • kill -KILLシェル

root(もちろん、すべて同じユーザーまたは別のシェルで実行されます。)プリンシパルが各do ... done反復で複数のタスクを実行している場合、そのタスクは後でのみキャプチャされます。そのプログラムが得られるのにリアルタイムで十分に長い時間がかかるプログラム。-STOPこのプログラムは反復の最後のプログラムでも、そうでない場合もあります。

一部(多くの場合)では、kill -KILL単にシェルを前処理して、シェルが通常どおりサブアイテムをクリーンアップするのを防ぎ、サブアイテムを実行して最終的に収穫するようにしますinit(またはシステムがそれに対応するアイテム)。しかし、可能子にいくつかのI / Oエラー、環境の違い、エラー、または孫の変更を見させ、回避しようとする「破壊的な」結果を引き起こす可能性があります。

答え2

繰り返しに含まれる内容とビルド方法によっては、実行可能ファイルのリンクを解除してスクリプトを中断することができます。たとえば、スクリプトは次のようになります。

do_first_thing && \
do_second_thing && \
do_third_thing

グローバルにリンクを解除/移動できると仮定するとdo_first_thing、つまり現在他のスクリプトでこれを必要としない場合は、次のようにします。

  • スクリプトが実行されないように接続を解除するか、名前を変更してください。
  • 繰り返しps進行状況の観察
  • ループがアイドル繰り返しを開始すると、ループを終了できます。

スクリプトの最初のコマンドをsleeporを含む他のスクリプトにリンクすることもできます。readこれにより、ループを無害に中断する時間と機会が提供されます。

関連情報