複数のGNUスクリーンセッションを開始した後
screen -S name1
screen -S name2
私は彼らに選択的に愛着をしたいと思います。もし私がするなら
screen -D -R name1
追加されませんが、印刷されます。
There are several suitable screens on:
6799.name1 (08.02.2013 15:47:23) (Detached)
3661.name2 (08.02.2013 13:43:25) (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
次のように入力すると:
screen -D -R 6799.name1
ところで、名前をパラメータとして受け取るスクリプトを通じてスクリーンセッションを開始しようとしているので、tty番号を知らずに添付したいと思います。この時点ではtty番号がわからないため、後で再接続したいときはいつでも手動で番号をコピーする必要があります。
確実な解決策は、文字列操作を使用して上記の画面出力からtty番号を抽出することです。しかし、これはちょっとぎこちないようです。 tty番号に関係なく、特定の名前付きセッションに接続するように画面に指示する方法はありますか?
[-d|-D] [-r|-R]
マンページに記載されているさまざまな組み合わせを試しました。
メモを追加:
SSHを使用してスクリプトから別々のスクリーンセッションを作成します。
ssh -t ${host} "
screen -S \"$exefile\" -t \"$exefile\" -R "nice -n$prio \"$exefile\" ${exeparams[@]}";
exit 0";
後で私は次のように接続しようとしました。
ssh -t ${host} "
screen -D -R -S \"$exefile\" &&
echo \"finished.\";
exit";
$exefile
実行ファイルの名前に関連付けたい画面セッションはどこにありますか?
答え1
私のセッションに接続している唯一の人なので、screen
時には複数のコンソールを1つのセッションに同時に接続したいので(マルチディスプレイモード)、この-x
スイッチを使用します。
# screen -S hosts
# screen -ls
There is a screen on:
12828.hosts (Detached)
1 Socket in /var/run/screen/S-uther.
# screen -x hosts
~からman 1 screen
-x Attach to a not detached screen session.
(Multi display mode).Screen refuses to attach
from within itself. But when cascading multiple
screens, loops are not detected; take care.
答え2
これは働きます:
screen -S name1 -D -R
答え3
私が見つけた唯一の信頼できるソリューションは、質問で説明されている無差別アプローチです。 sshを介して$exefile
リモートに名前を持つ既存の画面に接続するか$host
、存在しない場合に新しい画面を作成するには、bashシェルで次のものを使用できます。
ssh -t $host "
echo \"done.\" &&
echo \"itentifying screen ...\" &&
myscreen=\`screen -list | sed -n \"s/^\\s*\\s\\([0-9]*\\.$exefile\\)\\s\\s*.*$/\\1/p\"\` &&
if [ "X\$myscreen" = "X" ]; then
echo \"no existing screen session found, creating new\";
screen -S \"$exefile\";
else
echo \"connecting to screen \$myscreen\";
screen -d -r \"\$myscreen\";
fi &&
echo \"finished.\";
exit";
最初の実行はに新しいセッションを作成します$host
。画面が切り離されると、Ctrl+a,d
SSHログインシェルが閉じます。同じコマンドを再実行すると、既存の画面に再接続されます。$exefile
複数の画面セッションを異なる名前で使用でき、独立して再接続できます。驚くべきことは、sed
出力からscreen -list
パターンに一致する名前を検索することです[tty].name
。画面名にsed
特殊文字が含まれている場合は、エスケープする必要があります。