bash_profile
나는 내 것을 넣는 걸 좋아해요Git 저장소셸을 통해 액세스할 수 있는 모든 컴퓨터에 복제합니다. tmux
대부분의 경우 user@host
쉘 프롬프트의 전통적인 위치 대신 상태 줄에 문자열을 표시하기 때문입니다 .
그러나 내가 사용하는 모든 사이트에 이 tmux
프로그램이 설치되어 있는 것은 아니며 항상 사용하지 않을 수도 있습니다. tmux
세션에 참여하지 않는 시간을 감지하고 이에 따라 프롬프트를 조정하고 싶습니다 . 지금까지 내 반쯤 구운 솔루션은 .bash_profile
다음과 같습니다.
_display_host_unless_in_tmux_session() {
# ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'
(매번 확인하는 것이 최선의 접근 방식은 아닐 수 있으므로 더 나은 방법에 대한 제안을 환영합니다. Bash 스크립팅은 저의 강점이 아닙니다.)
답변1
TMUX
tmux는 tmux 세션 내에서 환경 변수를 설정하고 TERM
로 설정됩니다. 이는 100% 신뢰할 수 있는 지표는 아니지만(예: 내부에서 실행 중인지 외부에서 실행 중인지 screen
쉽게 알 수 없음 ) 실제로는 충분할 것입니다.screen
tmux
tmux
screen
if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then
PS1="@$HOSTNAME $PS1"
fi
이것을 복잡한 프롬프트 설정에 통합해야 하는 경우 PROMPT_COMMAND
(그런데 이것은 bash 설정이므로 내보내면 안 됩니다):
if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
PS1_HOSTNAME=
else
PS1_HOSTNAME="@$HOSTNAME"
fi
PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'
tmux가 설치되어 있는지 테스트해야 하는 경우:
if type tmux >/dev/null 2>/dev/null; then
# you can start tmux if you want
fi
그건 그렇고, 이 모든 것이 ~/.bashrc
대신 들어가야 합니다 ~/.bash_profile
(참조.bashrc와 .bash_profile의 차이점). ~/.bashrc
각 bash 인스턴스에서 실행되며 프롬프트 및 별칭과 같은 셸 사용자 정의가 포함됩니다. ~/.bash_profile
로그인할 때 실행합니다(로그인 쉘이 bash인 경우). 이상하게도 bash는 ~/.bashrc
로그인 쉘을 읽지 않으므로 다음 ~/.bash_profile
을 포함해야 합니다 .
case $- in *i*) . ~/.bashrc;; esac
답변2
이전 답변과 마찬가지로 변수를 테스트하면 환경 변수가 자체 수명 내에 설정되는 ${TERM}
극단적인 경우가 발생할 수 있습니다 .tmux
$ env|grep -i tmux TMUX=/tmp/tmux-1000/default,4199,5 TMUX_PANE=%9 TMUX_PLUGIN_MANAGER_PATH=/home/imil/.tmux/plugins/
특정 환경에 있는지 확인하려면 tmux
다음을 확인하세요.
$ [ -z "${TMUX}" ] && echo "not in tmux"
답변3
tmux
3.2 이상을 실행 중이 거나OpenBSD 6.8 이상또는 tmux
소스에서 빌드2020년 5월 16일 업데이트됨TERM_PROGRAM
), 환경 변수를 사용할 수 있습니다 .
if [ "$TERM_PROGRAM" = tmux ]; then
echo 'In tmux'
else
echo 'Not in tmux'
fi
이전 버전에는 tmux
이 환경 변수가 없습니다.
답변4
때로는 액세스 권한이 없을 수도 $TMUX
있고 $TERM
확실히 신뢰할 수 없는 경우도 있습니다. 그런 다음 창 ID(자체에서 얻은 ID tmux
와 다음에서 얻을 수 있는 ID)를 비교할 수 있습니다 xdotool
.
if [ $(tmux showenv | awk -v FS='=' '/WINDOWID/{print $2}') \
-eq \
$(xdotool getactivewindow) ]
then
echo "This terminal is running tmux!"
fi