터미널을 열 때 GNU 화면 실행

터미널을 열 때 GNU 화면 실행

열려 있는 모든 터미널이 스크린 세션으로 시작되기를 원합니다. 실제로 내가 원하는 것은 다음 단계를 수행하는 것입니다.

1. win+enter (open terminal in i3wm)
2. $ screen

이 작업을 자동으로 수행하고 싶습니다.

[[ $TERM != "screen" ]] && screen

안에 .bashrc. 부작용으로 이제 많은 bash 프로세스가 생성되는 것을 볼 수 있습니다(왜?)

alexhop+ 19307  0.0  0.0  28276  3016 pts/0    S+   11:20   0:00 screen
alexhop+ 19308  2.5  0.4  59272 33572 ?        Rs   11:20   0:00 SCREEN
alexhop+ 19309  0.2  0.0  24084  5516 pts/2    Ss+  11:20   0:00 /bin/bash
alexhop+ 19322  0.2  0.0  24084  5456 pts/3    Ss+  11:20   0:00 /bin/bash
alexhop+ 19338  0.2  0.0  24084  5316 pts/4    Ss+  11:20   0:00 /bin/bash
alexhop+ 19354  0.2  0.0  24084  5452 pts/5    Ss+  11:20   0:00 /bin/bash
alexhop+ 19370  0.2  0.0  24084  5388 pts/6    Ss+  11:20   0:00 /bin/bash
alexhop+ 19386  0.2  0.0  24084  5356 pts/7    Ss+  11:20   0:00 /bin/bash
alexhop+ 19402  0.2  0.0  24084  5452 pts/8    Ss+  11:20   0:00 /bin/bash
alexhop+ 19418  0.2  0.0  24084  5436 pts/9    Ss+  11:20   0:00 /bin/bash
alexhop+ 19434  0.2  0.0  24084  5456 pts/10   Ss+  11:20   0:00 /bin/bash
alexhop+ 19450  0.2  0.0  24084  5396 pts/11   Ss+  11:20   0:00 /bin/bash
alexhop+ 19466  0.2  0.0  24084  5388 pts/12   Ss+  11:20   0:00 /bin/bash
alexhop+ 19482  0.2  0.0  24084  5388 pts/13   Ss+  11:20   0:00 /bin/bash
alexhop+ 19498  0.2  0.0  24084  5388 pts/14   Ss+  11:20   0:00 /bin/bash
alexhop+ 19514  0.2  0.0  24084  5384 pts/15   Ss+  11:20   0:00 /bin/bash
alexhop+ 19530  0.2  0.0  24084  5512 pts/16   Ss+  11:20   0:00 /bin/bash
alexhop+ 19546  0.2  0.0  24084  5388 pts/17   Ss+  11:20   0:00 /bin/bash
alexhop+ 19562  0.0  0.0  24084  5384 pts/18   Ss+  11:20   0:00 /bin/bash
alexhop+ 19578  0.2  0.0  24084  5436 pts/19   Ss+  11:20   0:00 /bin/bash
alexhop+ 19594  0.2  0.0  24084  5388 pts/20   Ss+  11:20   0:00 /bin/bash
alexhop+ 19610  0.3  0.0  24084  5384 pts/21   Ss+  11:20   0:00 /bin/bash

어떤 도움이라도 대단히 감사하겠습니다.

호스트 시스템: Ubuntu 16.04.2 LTS

답변1

이는 환경( , 등)의 무언가가 TERM 변수(예: 이와 유사한 것)를 설정하고 있기 때문에 거의 확실하게 .bashrc발생 /etc/profile합니다 TERM=xterm.

이로 인해 [[ $TERM != "screen" ]]테스트가 true로 평가되어 다른 화면 인스턴스가 시작됩니다.

bash그러면 화면 내부에서 $SHELL이 실행되어 부팅 screenscreen부팅 의 무한 루프가 발생합니다 bash.

그런데, $TERM실행하기 전에 올바르게 설정하지 않으면 실행 중인 터미널을 올바르게 사용하는 방법을 알 수 없게 됩니다. 따라서 설정하지 않는 것은 좋은 선택이 아닙니다.screenscreen

쉘이 내부적으로 실행 중인지 감지하는 더 좋은 방법이 몇 가지 있습니다 screen. 바라보다Linux "화면" 내에서 실행 중인지 어떻게 알 수 있나요?그리고내가 화면에 있는지 어떻게 알 수 있나요?이 질문에 대한 답변은 자매 Stack Exchange 사이트에서 여러 번 요청되었습니다.

가장 쉬운 방법은 아마도 $STY 변수가 비어 있는지 테스트하는 것입니다. 에 따르면 man screen이 변수는 screen"대체 소켓 이름"을 보유하도록 설정됩니다.

즉, 그렇지 않습니다:

[[ $TERM != "screen" ]] && screen

이 시도:

[ -z "$STY" ] && screen    # test if $STY is empty

또는:

[ -n "$STY" ] || screen    # test if $STY is NOT empty.

[[ .... ]]원한다면 그것도 사용할 수 있습니다. 큰따옴표를 사용할 필요가 없다는 점을 제외하면 아무런 차이가 없습니다 $STY. 제 생각에는 이것은 나쁜 습관이며 귀하의 경우 때문에 인용해야 합니다.하다큰따옴표로 묶어야 하는 변수의 수는 그렇지 않은 몇 가지 특수한 경우보다 훨씬 많습니다.

관련 정보