현재 쉘 세션이 gui 또는 tty에 있는지 확인하는 방법

현재 쉘 세션이 gui 또는 tty에 있는지 확인하는 방법

zsh 셸의 어떤 환경 설정을 통해 내가 x-server에 있는지 아니면 콘솔에 있는지 확인할 수 있나요? 터미널 에뮬레이터에 있을 때와 tty/콘솔에 있을 때마다 .zshrc에서 다른 설정을 가질 수 있는 방법을 찾으려고 노력하고 있습니다.

기본적으로 나는 그랬을 것이다.

(의사 코드)

if(current shell session is in console)
[
    implement PROMPT x
]else[
    implement PROMPT Y
] 

답변1

현재 tty의 이름이 로컬 콘솔과 같은지 확인하는 것이 더 간단할 것이라고 생각합니다.

case $(tty) in 
  (/dev/tty[1-9]) PS1='console version';; 
              (*) PS1='not console version';; 
esac

이는 결과를 확인하는 한 가지 방법일 뿐입니다. grep이나 매개변수 확장을 사용할 수 있지만 이는 아이디어를 보여줍니다.

확인할 수도 있지만 $DISPLAY보장되지는 않으며 X11 환경이 필요한 쉘 프롬프트에서 무엇을 할지 상상할 수 없습니다.

답변2

@Ignacio Vazquez-Abrams 및 @Jeff Schaller(및 아래의 다른 댓글 작성자) 덕분에 $DISPLAY가 필요한 환경 변수라는 것을 깨달았습니다. 디스플레이 서버에 있는 경우 $DISPLAY가 보유한 값은 0 (무언가) 을 반환합니다 . 따라서 다음 코드는 작동해야 합니다.

if [[ -n $DISPLAY ]];
then
    PROMPT = (etc)
else 
    PROMPT = (etc2)
fi

다들 감사 해요.

답변3

콘솔에서 작업할 때 먼저 로그인합니다.
따라서 로그인 정보를 검색하면 현재 위치를 알 수 있습니다.

다음을 시도해 볼 수 있습니다.

[ "$(ps -t $(ps -o comm= -o tty= | \
awk '$1=="ps"{print $2}') | \
grep [l]ogin)" ] && \
echo "console" || echo "terminal"

관련 정보