TTY 가상 콘솔 + tmux: ~/.bashrc가 여러 번 실행되는 것 같나요?

TTY 가상 콘솔 + tmux: ~/.bashrc가 여러 번 실행되는 것 같나요?

나는 기본 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에서 발생했습니다.

나는 다음을 사용하고 있습니다 :

원인은 무엇일까요?

답변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_profilebash가 대신 실행합니다 ~/.profile.)

관련 정보