제가 작업 중인 프로젝트의 경우 화면이 현재 사용자로 실행되고 있는지(연결 또는 분리) 감지하고 싶습니다. 나는 최소한의 프로세스를 사용하고 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을 찾았으므로 이식성이 있어야 합니다.