![TTY 가상 콘솔 + tmux: ~/.bashrc가 여러 번 실행되는 것 같나요?](https://linux55.com/image/102612/TTY%20%EA%B0%80%EC%83%81%20%EC%BD%98%EC%86%94%20%2B%20tmux%3A%20~%2F.bashrc%EA%B0%80%20%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%EC%8B%A4%ED%96%89%EB%90%98%EB%8A%94%20%EA%B2%83%20%EA%B0%99%EB%82%98%EC%9A%94%3F.png)
나는 기본 Linux 가상 콘솔(내가 사용하는 것) 대신 tmux를 사용하는 것을 선호하므로 TTY에 로그인할 때 tmux가 자동으로 실행되도록 agetty
이것을 넣었습니다 .~/.bashrc
if [[ "$(tty)" == /dev/tty* ]]; then
tmux -u
fi
언뜻 보면 이것이 작동하는 것처럼 보입니다. 로그인하자마자 tmux가 실행됩니다. 그러나 tmux를 종료하면 tmux가 즉시 두 번째로 실행됩니다! 완전한 동작은 다음과 같습니다.
- ctrl+ alt+f2
- 로그인
- tmux를 실행하기 전에 잠시 표시되는 기본 프롬프트
- 나도 끼워 줘
tmux
- ctrl+d
- 텍스트가
[exited]
잠깐 깜박인 후tmux
다시 돌아옵니다. - ctrl+d
- 없이 기본 터미널로 돌아가기
tmux
- ctrl+d
- 이제 난 완전히 아웃됐어
추적이 안되네요 - 여러가지 로깅을 해보고, 환경변수를 설정하고, 찾아보니 $SHLVL
실제로 .bashrc
는 로그인할 때마다 7번은 실행되는 것 같습니다!
나는 일반적으로 X에서 tmux를 사용하지 않지만(Konsole만 사용함) tmux가 아닌 모든 세션에 대해 tmux가 실행되도록 bashrc를 설정하려고 시도했는데 이 이중 동작은아니요Konsole에서 발생했습니다.
나는 다음을 사용하고 있습니다 :
- 아치 리눅스(4.8.13-1)
- 아지티
- 멀티플렉서
- 바시쉬
- 전체
~/.bashrc
및 기타 구성(~/.bash_profile
파일 없음):https://gist.github.com/tobek/c8038c207f318528c3157b4a402aa2d9(Bashish 항목을 제거하려고 시도했지만 동작은 그대로 유지됩니다)
원인은 무엇일까요?
답변1
수정 #1:
추적할 수 없었지만 다음 해킹으로 문제를 해결했습니다 ~/.bashrc
.
if [ -z "$user_bashrc_already_run" ]; then
export user_bashrc_already_run=1
else
return
fi
수정 #2:
이를 올바르게 추적해 보십시오. TTY는 대화형 로그인 쉘이므로 /etc/profile
및 둘 다 실행됩니다 ~/.profile
(X의 터미널 에뮬레이터는 로그인 쉘이 아니기 때문에 둘 중 하나도 로드하지 않습니다). 제 경우에는(왜 Bashish 설치인지는 모르겠지만) 파일은 동일하고 모든 스크립트의 소스가 됩니다 /etc/profile.d
. 제 경우에는 하나의 소스가 포함되어 있습니다 ~/.bashrc
.
모든 중복 코드를 제거하면 ~/.profile
문제가 해결되었습니다.
"호출" 섹션을 읽고 man bash
다음과 같은 질문을 읽어보세요.https://serverfault.com/questions/261802/what-are-the-function-differences- Between-profile-bash-profile-and-bashrc굉장히 유용하다.
유사한 문제가 있는 사람이 있는 경우 tmux를 하위 쉘로 실행하는 대신 쉘이 tmux로 대체되므로 tmux를 실행하는 더 좋은 방법이 있습니다.
if command -v tmux>/dev/null; then # check if tmux command exists
if [[ "$(tty)" =~ /dev/tty ]] && [[ ! "$TERM" =~ screen ]] && [ -z "$TMUX" ]; then
# We're on a TTY and *not* in tmux
exec tmux -u
fi
fi
~/.profile
비로그인 셸이 아닌 로그인 셸에서 실행되기를 원했기 때문에 이를 내 컴퓨터에 넣기로 결정했습니다 . (이 있으면 ~/.bash_profile
bash가 대신 실행합니다 ~/.profile
.)