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"