複数の画面セッションを自動的に開始するにはどうすればよいですか?

複数の画面セッションを自動的に開始するにはどうすればよいですか?

screenを起動し、異なる名前のセッションを 4 つ作成し、4 つの異なるコマンドを実行するコマンドを作成しようとしています。

これを手動で行う方法を知っています:

1. screen
2. ./command1 args
3. CTRL-A :sessionname Session 1
4. CTRL-A C
5. (GOTO 2)

これを bash スクリプトなどで実行できますか? どのように実行しますか?

答え1

screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"$COMMANDバックグラウンドで実行される画面が生成されます。

でアクティブなセッションを表示しscreen -ls、 で再接続できますscreen -r "$SESSION_NAME"

デッドセッションは で強制終了できますscreen -wipe

答え2

複数のセッションを自動的に開始するには、screen 用の設定ファイルを設定します.screenrc。このファイルでは、セッションの作成、プログラムの起動、作業ディレクトリの変更などを行うことができます。私は、screen セッションを初期化するためにこれを使用します。

.screenrc ファイルの簡単な例:

# don't display the copyright page
startup_message off

# increase scrollback buffer size
defscrollback 10000

# create windows
screen -t TODO vim TODO.txt
chdir src
screen -t coding vim main.c
screen -t run 

上記のコマンドscreenはそれぞれ 1 つの画面セッションを作成します。-tセッションのタイトルを設定します。行の残りの部分は実行するコマンドとそのパラメータです。

したがって、最初の行と 2 番目のscreen行はセッションを開始し、vim内部で起動します。3 番目の行はセッションを開始し、プロンプトを表示します。chdir後続のすべてのセッションの作業ディレクトリを変更します。

複数のファイルが必要な場合は.screenrc、任意の名前を付けて、 で 1 つを選択しますscreen -c myscreenrc

答え3

d、m、S オプションを一緒に使用できます。

screen -Sdm s1
screen -Sdm s2
screen -Sdm s3

S : スクリーンを作成する

d : 画面から切り離す

m : 画面が別の画面内から呼び出されるかどうかに関係なく、画面の作成を強制します。

答え4

調査やサポートのために一連のホストを開く必要があるケースが数多くあります。これらの追加ウィンドウはたまにしか必要ないので、.screenrcアプローチではなくシェル スクリプトを使用することにしました。

たとえば、~/bin/prod_support の場合:

#!/bin/bash

if [[ ! -z "$STY" ]]; then
        screen -t "hosta" ssh hosta
        screen -t "hostb" ssh hostb
else
        echo "start up screen first"
fi

から実行した場合非スクリーンシェルにリマインダーが表示されます...画面内から実行すると、スクリプトの実行ごとにタイトル付きのウィンドウが追加されます。

関連情報