web-dev-qa-db-ja.com

スクリプトは、仮想コンソールとxtermのどちらにいるのかをどのように知ることができますか?

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

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

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

何かのようなもの:

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

インタラクティブシェルと非インタラクティブシェルを区別する場合は、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
9
lynxlynxlynx

これはオペレーティングシステムによって異なります。 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に設定されますが、OSによって異なる場合があります) 。使用している各種アプリケーションのTERMの内容を確認し、適宜設定してください。

7
teppic