GNU Screen이 실행 중인지 감지하는 논리

GNU Screen이 실행 중인지 감지하는 논리

제가 작업 중인 프로젝트의 경우 화면이 현재 사용자로 실행되고 있는지(연결 또는 분리) 감지하고 싶습니다. 나는 최소한의 프로세스를 사용하고 distro/unix 기반 운영 체제 간에 이식 가능한 방법을 원합니다.

옵션 1

ps -U $USER|grep screen|grep -v grep &>/dev/null && screen-yes

이것은 어수선해 보이지만 작업을 완료합니다. Darwin에서는 추가 grep이 필요하지만 CentOS에서는 그렇지 않습니다. 더 좋은 방법이 있습니까?

옵션 2

screen -list|egrep '(There is a screen on|There are screens on)' &>/dev/null && screen-yes

이는 screen 명령을 직접 사용하지만 비교적 인간 친화적인 출력 스타일로 인해 큰 정규식이 필요합니다.

더 좋은 방법이 있나요?

답변1

화면의 반환 코드를 사용할 수 있어야 합니다. 화면이 있으면 True, 화면이 없으면 False입니다.

screen -list >/dev/null && screen-yes

답변2

내 솔루션은 옵션 1의 변형입니다.

ps -U $USER | grep [s]creen &>/dev/null && screen-yes

문자열의 첫 번째 문자 주위의 대괄호는 쉘 glob 마법을 사용하여 출력에 명령이 반환되는 것을 screen방지합니다 . grep동일한 최종 결과, grep명령이 하나 줄어듭니다.

답변3

if test ! -z "$STY" 
then    
    echo "I am running in GNU Screen"
fi

외부 프로그램이 필요 없는 빠른 솔루션입니다.

답변4

pgrep -U $USER screen &>/dev/null && screen-yes

이는 추가 프로세스가 필요하지 않으며 옵션 2와 함께 >1 프로세스를 사용하여 상대적으로 긴 정규식이 포함된 옵션 1의 문제를 해결합니다. 꽤 오래된 시스템에서 pgrep을 찾았으므로 이식성이 있어야 합니다.

관련 정보