다음 명령을 사용하여 스크린 세션을 만들었습니다.
screen -t name
이 이름을 기준으로 이 세션을 다시 열 수 있는 방법이 있습니까(중복 이름이 없다고 가정)?
답변1
프로세스 목록을 보는 것 외에는 다른 옵션이 없다고 생각합니다.
screen -r $(pgrep -f '\<SCREEN.* -t name\>')
*BSD에는 다른 것이 필요합니다:
screen -r $(pgrep -t- -f '\<screen.* -t name\>')
옵션은 제어 터미널이 없는 프로세스만 일치시키도록 -t-
지시합니다 . 이 경우 첫 번째 연결된 디스플레이가 아닌 백엔드 프로세스만 일치합니다( 백엔드 프로세스를 모든 곳으로 변경하지만 *BSD에서는 문자열 변경 사항이 적용되지 않습니다). Linux에서와 마찬가지로 프로세스 목록에 미러링됩니다.pgrep
screen
screen
argv[0]
"SCREEN"
argv
FreeBSD에서는 -a
옵션("호출 프로세스의 상위 항목도 일치")이 필요할 수도 있습니다. 불행히도 pgrep -t-
Linux에서는 지원되지 않으며 pgrep -a
완전히 다른 작업을 수행합니다.
따라서 모든 것을 함수에 넣으십시오.
# usage tscreen title [args ...]
tscreen(){
title=$1; shift
screen -r $(
pgrep -f "\\<SCREEN.* -t $title\\>" ||
pgrep -t- -f "\\<screen.* -t $title\\>" ||
pgrep -at- -if "\\<screen.* -t $title\\>" ||
echo "title=$title"
) "$@"
}
답변2
명령줄에서 세션 이름을 인수로 사용하기만 하면 됩니다.
screen -r SESSIONNAME
동일한 세션 이름을 가진 여러 화면이 있는 경우 다음과 같이 PID도 지정해야 합니다.
[jenny@sameen ~]$ screen -r test1
There are several suitable screens on:
23669.test1 (Detached)
23594.test1 (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
[jenny@sameen ~]$ screen -r 23669.test1
이는 RHEL7의 화면 4.01.00devel과 BSD의 화면 4.04.00에서 확인되었습니다.