質問: シェルスクリプト:画面を実行し、いくつかの画面を開いて、それぞれでコマンドを実行します タイトルの内容:私のシェルスクリプトは コマンドaを実行し、完了するまで待ちます 「screen」を実行する 初期画面でコマンドb1を実行します 新しいウィンドウを開きます(通常はcmd-a-c経由) 新しいウィンドウでコマンドb2を実行します 新しいウィンドウを開く 新しいウィンドウでコマンドb3を実行します それだけです。ボーナスポイントは得られますが、一部(またはすべて)が完了するまで待つ必要はありません。どうすればこれを行うことができますか?
回答: バックグラウンドを開始しますscreenセッションに「mysession」という名前を付けます。screen -d -m -s mysession 最初のウィンドウでtopを実行しますscreen -s mysession -x exec top 別のウィンドウを開始し、「win1」という名前を付けて、その中で「vmstat 10」を実行しますscreen -s mysession -x screen -t win1 screen -s mysession -p win1 -x exec vmstat 10 別のウィンドウを開始し、「win2」という名前を付けて、その中で「iostat 30」を実行しますscreen -s mysession -x screen -t win2 screen -s mysession -p win2 -x exec iostat 30 接続してセッションを表示するには:screen -x -s mysession プログラムのいずれかが終了した場合、screenがそれぞれでシェルを開始するため(必要に応じて使用できます)、ウィンドウは閉じません。-or-ウィンドウごとに1つのコマンドのみが必要な場合、またはプロセスの完了後にさらに簡単にクリーンアップしたい場合は、デフォルトのシェルを実行しないでください。各ウィンドウ、コマンドのみ:screen -d -m -s mysession top screen -s mysession -p 0 -x title win0 # optional! screen -s mysession -x screen -t win1 vmstat 10 screen -s mysession -x screen -t win2 iostat 30 screenは、プロセスが終了するか、ウィンドウをシャットダウンするときに、ウィンドウを「終了」します(ウィンドウの内容はそのままにしておく可能性があります。以下のzombieを参照)。screen -s mysession -x quit # nuke whole the session またはscreen -s mysession -p win2 -x kill screen -s mysession -p win1 -x kill screen -s mysession -p 0 -x kill (これにより、実行中のプロセスが強制終了される場合と強制終了されない場合がありますが、screenはそれぞれにsighupを送信します)screenでウィンドウを自動的に閉じ、すべてのプロセスが完了したら終了する場合は、セッションの作成後にこれを追加します(ただし、.screenrcにzombieが設定されていない場合は、とにかくおそらくデフォルトです):screen -s mysession -x zombie これにより、「ゾンビ」の閉じるキーと復活キーの設定が解除され、各ウィンドウのコマンドが終了するとウィンドウが消え、最後のウィンドウが終了するとscreen自体が閉じます。 (defzombieの代わりにzombieを使用する必要があるかもしれませんが、ドキュメントが反対であるにもかかわらず、後者のみが機能します。)