web-dev-qa-db-ja.com

ターミナルウィンドウ(GUI)とコンソール(CTRL + ALT + F3)を区別するにはどうすればよいですか?

次のような色付きのbashプロンプトを使用します。

blue=$(tput setaf 4)
reset=$(tput sgr0)
bold=$(tput bold)
export PS1='($?) \[$bold$blue\]\u@\h:\w\[$reset\]$(__git_ps1)> '

私は通常、ターミナルウィンドウ(gnome-terminal)で作業しますが、フルスクリーンコンソール(CTRL+ALT+F3)。

色付きのプロンプトはGUIターミナルでは問題ありませんが、色が異なって見えるため、全画面で読みにくくなっています。そのため、コンソールウィンドウでは別の色(cyan=$(tput setaf 6)など)を使用したいと思います。これが機能するためには、どのmodeにいるかを把握し、それに応じて$PS1を設定する必要があります。

ttyコマンドを試しました。それは与えます

/dev/pts/0  # GUI terminal
/dev/tty3   # console 

$TERMの値も調べてみました。それは与えます

xterm-256color  # GUI terminal
linux           # console

両方とも私のために働くでしょうが、私の質問は次のとおりです:それはコンソールと端末を確実に区別する正しい方法ですか、それとももっと良い方法がありますか?それは重要です。

2
PerlDuck

これを判断する方法はいくつかありますが、3つの有名な存在です。

  • tty-標準入力に接続された端末のファイル名を出力します:

    /dev/pts/10
    /dev/tty1
    

    この関数 Sergiy Kolodyazhnyyによって書かれたttyを使用します。

  • ps hotty $$ps --no-header --format tty --pid $$の略):

    pts/10
    tty1
    
  • who who whom | awk '{ print $2 }'(実際にはwhoは、 2つの任意の引数 で、who -mと同じです。これはしゃれにも一致します):

    pts/10
    tty1
    

TERMの値はディストリビューションとリリース間で異なると思われますが、ttyは安定した信頼できる方法です。私はそれを次のように使用します:

if tty|grep -q tty; then
  echo "That's a TTY."
else
  echo "That's not a TTY."
fi

少なくともgnome-terminalwhoには問題があるようです。幸い、この問題を回避するための ラッパースクリプト があります。

便利なリンク:

5
dessert