仮想コンソールまたはxtermにあるとき、私のスクリプトはどうやって知ることができますか?

仮想コンソールまたはxtermにあるとき、私のスクリプトはどうやって知ることができますか?

私のスクリプトのいくつか(キーマップの変更、公開鍵の追加)は、仮想コンソールとxtermで異なる動作をする必要があります。本物のコードは何ですか?

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi

答え1

対話型シェルと非対話型シェルを区別するには、組み込みtestサポートを使用してこれを検出します(kshにあるかどうかはわかりませんが、coreutilsのバイナリもサポートしています)。

test -t 0 # will return 0 for interactive shells

tty/pty/ptsまたは他の項目にあるかどうかを本当に知りたい場合は、次の出力を解析してくださいtty

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2

答え2

これはオペレーティングシステムによって異なります。 Linuxでは、次のことができます。

#!/bin/ksh

if [ "$TERM" == "linux" ]; then
  echo "I'm in a virtual console"
else
  echo "I'm not in a virtual console"
fi

もちろん、これはTERM仮想コンソールにログインしたときにのみ自動的に設定される環境変数を直接変更しなかったと仮定しますlinux(Ubuntuではコンソールアプリケーションでに設定されますが、オペレーティングシステムxtermによって異なります)。 。使用しているさまざまなアプリケーションでTERMの内容を確認し、適切に設定してください。

答え3

接続するXサーバーがあるかどうかを確認したいようです。

それは次のとおりです。

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi

関連情報