bash 스크립트를 실행할 때 이것이 가능한지 확인하고 싶습니다 screen
.
.bashrc
세션이 화면 내에서 시작되는지 여부에 따라 명령 프롬프트의 색상을 설정할 수 있기 를 원합니다 .
답변을 받은 후 다음 링크를 찾았습니다.내가 화면에 있는지 어떻게 알 수 있나요?
답변1
일반적으로 $STY
설정됩니다.
그래서:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STY
보통 대화를 나누기 위해 필요한 것 screen
. 제어에 사용되는 Unix 도메인 소켓에 대한 경로를 구성하는 데 사용됩니다 screen
( /var/run/screen/S-$USER/$STY
.
ssh
예를 들어 이 화면에서 다른 컴퓨터에 연결하면 작동하지 않습니다. 여기서 실행된 셸은 $STY
해당 환경에 하나도 없으며 컴퓨터의 Unix 도메인 소켓에 액세스할 수 없기 때문에 어쨌든 아무 소용이 없습니다.
그러나 터미널은 이스케이프 시퀀스를 사용하여 해당 유형을 결정하도록 쿼리할 수 있습니다.
if [ -t 1 ] && [ -t 0 ]; then
s=$(stty -g)
stty -icanon -echo min 0 time 3
printf '\033[>c'
type=$(dd count=1 2> /dev/null)
stty "$s"
case $type in
(*'>83;'*) echo "this is screen"
esac
fi
@val0x00ff가 제안한 또 다른 접근 방식은 환경 변수의 값을 확인하는 것입니다 $TERM
. 이 값은 애플리케이션이 어떤 유형의 터미널과 통신하고 있는지 알려주기 위한 것입니다. ( 다양한 터미널 변형이 구현될 수 있음) screen
로 시작하는 것으로 설정됩니다 . 지나가 다 , , . 위와 같이 작동한다고 보장할 수는 없지만 더 간단하고 방해가 적습니다.screen
screen
$TERM
rlogin
rsh
telnet
ssh
case $TERM in
(screen*) echo "I'm more than likely running in screen"
esac
이전 솔루션과 마찬가지로 실행 중일 수도 있지만 screen
명령을 실행하지 못할 수도 있습니다 screen -X
. 그러나 이스케이프 시퀀스를 사용하여 명령을 전달할 수 있습니다(보안상의 이유로 기본적으로 활성화되어 있지는 않지만).
답변2
화면에서 실행하면 $TERM
환경 변수가 화면으로 변경됩니다. 다음과 같은 스크립트를 확인할 수 있습니다.
if [[ "$TERM" == screen* ]]; then
echo "Running in screen"
else
echo "Outside screen"
fi
방법 중 하나일 것입니다. echo $TERM
화면 밖과 echo $TERM
화면에서 차이점을 다시 살펴보세요.
답변3
나는 tmux를 직접 사용하고 있으며 세션은 아직 tmux 세션에 있지 않은 경우에만 나열됩니다.
if [ -z "$TMUX" ]; then
alias tmuxa='tmux attach -d -t'
alias tmuxc='tmux new-session -s'
echo "You're not in a tmux session, create a new one with tmuxc, or attach to one of the ones below with tmuxa"
tmux ls
fi