web-dev-qa-db-ja.com

現在のシェルセッションがGUIまたはttyにあるかどうかを確認する方法

Zshシェルのどの環境設定で、Xサーバーを使用しているか、コンソールを使用しているかを確認できますか?ターミナルエミュレーターにいるときとtty/consoleにいるときはいつでも、.zshrcに異なる設定を実装する方法を見つけようとしています。

基本的に私は持っているでしょう、

(擬似コード)

if(current Shell session is in console)
[
    implement Prompt x
]else[
    implement Prompt Y
] 
2
user279540

現在のttyがローカルコンソールのように名前が付けられているかどうかを確認する方が簡単だと思います。

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

これは、結果を確認する1つの方法にすぎません。 grepまたはパラメーター展開を使用できますが、それはその考えを示しています。

さらに$DISPLAYをチェックすることもできますが、それは保証ではなく、X11環境を必要とするシェルプロンプトで何をするか想像できません。

2
Jeff Schaller

@ IgnacioVazquez-Abramsと@JeffSchaller(および以下の他のコメント提供者)のおかげで、$ DISPLAYが必要な環境変数であることに気付きました。ディスプレイサーバーを使用している場合、$ DISPLAYが保持する値 0になります (何かとして)返されます。したがって、次のコードは機能します(すべきですか?)-

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

ありがとうございます。

1
user279540

コンソールで作業するときは、最初にログインします。
したがって、ログインを探すと、自分がどこにいるかを知ることができます。

あなたはこれを試すことができます:

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