現在のシェルセッションが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"

関連情報