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때로는 여러 콘솔을 한 세션에 동시에 연결하고 싶기 때문에(다중 디스플레이 모드) 이 -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특수 문자가 포함된 경우 이스케이프해야 할 수도 있습니다.

관련 정보