여러 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,d
SSH 로그인 셸이 닫힙니다. 동일한 명령을 다시 실행하면 기존 화면으로 다시 연결됩니다. $exefile
여러 화면 세션을 다른 이름으로 사용할 수 있으며 독립적으로 다시 연결할 수 있습니다. 놀라운 점은 sed
출력에서 screen -list
패턴과 일치하는 이름을 검색한다는 것입니다 [tty].name
. 화면 이름에 sed
특수 문자가 포함된 경우 이스케이프해야 할 수도 있습니다.