tty番号を知らずにGnu画面を接続する方法

tty番号を知らずにGnu画面を接続する方法

複数の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,dSSHログインシェルが閉じます。同じコマンドを再実行すると、既存の画面に再接続されます。$exefile複数の画面セッションを異なる名前で使用でき、独立して再接続できます。驚くべきことは、sed出力からscreen -listパターンに一致する名前を検索することです[tty].name。画面名にsed特殊文字が含まれている場合は、エスケープする必要があります。

関連情報