리눅스“스크린”안에서 실행하고 있는지 어떻게 알 수 있습니까?


60

"화면"은 연결이 끊긴 ssh 세션에 다시 연결하는 방법에 언급 된 프로그램을 나타냅니다 . 좋은 시설입니다.

그러나 정말로 알고 싶은 질문이 있습니다. "스크린"내에서 실행 중인지 어떻게 알 수 있습니까? 차이점은 다음과 같습니다.

  • 그렇다면, 나는 현재 터미널 창을 안전하게 닫을 수 있다는 것을 알고 있습니다.
  • 그렇지 않다면 터미널 창을 닫기 전에 보류중인 작업을 처리해야한다는 것을 알고 있습니다.

더 좋은 점은 언제든 자동으로 볼 수 있도록 PS1 프롬프트에이 상태를 표시하고 싶습니다.


3
화면 대신 tmux를 사용하면 기본적으로 상태 표시 줄이 약간 나타납니다. 기본 사용법과 거의 동일합니다.
Samuel Edwin Ward

9
토템을 테이블 위에 놓고 회전 시키십시오. 계속 회전하면 괜찮습니다. 그렇지 않으면 당신은 스크린에 있습니다 :]
Konerak

당신은 또한 사용할 수 있습니다 byobu 화면 TMUX와 함께. 로그인시 자동으로로드되도록 설정 한 다음 F6 키 연결을 끊으면 로그 아웃됩니다.
mp3foley

답변:


88

( StackOverflow에서 " 화면에 있는지 여부를 어떻게 알 수 있습니까? " 에서 도난 당하고 jho 사용자가 작성했습니다 . PS StackExchange 사이트 전체에서 중복 투표에 투표 할 수 없습니다.)

확인하십시오 $STY. 널인 경우 "실제"터미널에있는 것입니다. 포함 된 것이 있으면 화면의 이름입니다.

화면에없는 경우 :

eric@dev ~ $ echo $STY
eric@dev ~ $ 

화면에 있다면 :

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

화면 대신 tmux를 사용하는 경우에도 확인하십시오 $TMUX. 이것을 프롬프트에 추가하려면 다음을 추가하십시오 ~/.bashrc.

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi

2
sudo기본적으로 그것을 통해 무언가를 실행하면을 포함한 환경 변수를 상속하지 않습니다 $STY. 그러나 됩니다 일반적으로 어쩌면 하나를 확인 sudo는 환경에 전파 또는$TERM $STY $TERM=="screen"
rcoup

14

자신과 통신 $STY하는 screen데 사용되는 세부 사항을 제공하는 정보를 찾으십시오 . $WINDOW그러면 현재 screen창 번호가됩니다.


13

내가 일반적으로 사용하는 간단한 검사는 Ctrl-를 누르는 것입니다 a.

  • 경우 커서가 행의 시작으로 이동 , 난 에 있지 화면 세션.

  • 경우 아무 일도 발생하지 , 내가 알고 내가 내부에있어 화면 세션 난 그냥 화면 제어 키를 사용한 적이있다. 그런 다음 a(줄의 시작 부분으로 이동 w)을 누르거나 (현재 화면 창 표시) 다른 "무해한"화면 명령을 실행하여 명령 프롬프트로 돌아갑니다.

(물론, 이것은 현재 bash 나 "줄의 시작으로 점프"하거나 Ctrl-a를 눌렀을 때 똑같이 무해한 소프트웨어를 실행하는 경우에만 작동합니다.


3
물론 화면 제어 키가 기본 Ctrl-a로 남아있는 경우에만 작동합니다.
ShreevatsaR

1
제어 키 + DD를 누르면 ssh가 분리되고 종료됩니다. 보다 편리
하게이

실제 질문에 대한 대답은 좋지만이 방법은 스크립팅 할 수 없습니다.
Nikodemus RIP

7

글쎄, 대부분 의 경우 (누군가가 물건을 망치려고 시도하지 않는 경우) 당신 TERMscreen(또는 적어도 screen어딘가에 언급 ) 설정됩니다.

문제에 대한 쉬운 해결책은 어디에서나 화면을 실행하는 것입니다. 그것없이 집을 떠나지 마십시오.


$TERM또한 일반적으로를 통해 전파됩니다 sudo.
rcoup

7

나는 이것을 내 안에 두었다 .bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

완벽하지는 않지만 새 화면을 만들 때마다 창 번호가 프롬프트에 표시됩니다. 내가 달리지 않으면 screen숫자가 없습니다.


3

더 멋진 방법이 있습니다.

~ / .screenrc에 다음을 추가하면 아래쪽에 상태 줄이 표시됩니다 (날짜, 시간 및 시스템로드가 반전 된 텍스트로 표시됨) 아래 맨 페이지 링크에 더 많은 이스케이프 코드가 있습니다.

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

와의 화면 세션에서 소스를 지정하십시오 ctrl-a:source ~/.screenrc.

Linux Journal의 Kyle Rankin에게 감사드립니다. http://www.linuxjournal.com/article/10950 에서 환상적인 기사를 참조하십시오 . 그가 참조하는 매뉴얼 페이지 섹션은 http://www.gnu.org/software/screen/manual/screen.html#String-Escapes 에서 찾을 수 있습니다 .


2

프로세스 트리를 재귀화 $$하여 화면 인스턴스가 있는지 확인할 수도 있습니다. 정확한 체인은 아마도 설정에 달려있을 것입니다. 내 OS X 상자의 zsh내부 화면에는 login부모, SCREEN조부모 및 screen증조부모가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.