タイトル通りです:
私のシェルスクリプトは
- コマンドAを実行し、完了するまで待つ
- 「スクリーン」を実行する
- 初期画面でコマンドB1を実行する
- 新しいウィンドウを開く(通常はCmd-ac経由)
- 新しいウィンドウでコマンドB2を実行する
- 新しいウィンドウを開く
- 新しいウィンドウでコマンドB3を実行する
これで完了です。一部 (またはすべて) が完了するまで待つ必要はありませんが、完了するとボーナス ポイントが付与されます。どうすればこれが実行できますか?
答え1
バックグラウンドで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
いずれかのプログラムが終了した場合、各プログラムでシェルが開始されるため、ウィンドウは閉じません(必要に応じて使用できます)。
- または -ウィンドウごとに 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
、セッションを作成した後にこれを追加します (ただし、zombie
に設定されていない場合は.screenrc
、これがおそらくデフォルトです)。
screen -S mysession -X zombie
これにより、「ゾンビ」の閉じるキーと復活キーの設定が解除され、各ウィンドウのコマンドが終了するとウィンドウが消え、screen
最後のウィンドウが終了するとそれ自体が閉じます。( の代わりに を使用する必要があるかもしれませんが、ドキュメントに反して、私の場合は後者しか機能しません。)defzombie
zombie