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