私のスクリプトのいくつか(キーマップの変更、公開鍵の追加)は、仮想コンソールと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