열려 있는 모든 터미널이 스크린 세션으로 시작되기를 원합니다. 실제로 내가 원하는 것은 다음 단계를 수행하는 것입니다.
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이 실행되어 부팅 screen
및 screen
부팅 의 무한 루프가 발생합니다 bash
.
그런데, $TERM
실행하기 전에 올바르게 설정하지 않으면 실행 중인 터미널을 올바르게 사용하는 방법을 알 수 없게 됩니다. 따라서 설정하지 않는 것은 좋은 선택이 아닙니다.screen
screen
쉘이 내부적으로 실행 중인지 감지하는 더 좋은 방법이 몇 가지 있습니다 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
. 제 생각에는 이것은 나쁜 습관이며 귀하의 경우 때문에 인용해야 합니다.하다큰따옴표로 묶어야 하는 변수의 수는 그렇지 않은 몇 가지 특수한 경우보다 훨씬 많습니다.