Как мой сценарий может узнать, когда я нахожусь в виртуальной консоли против xterm?

11

Некоторые из моих сценариев (изменение таблицы ключей, добавление открытого ключа) должны работать по-разному, как в виртуальной консоли, так и в xterm. Какой реальный код для

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
Джон Бабер-Лусеро
источник

Ответы:

6

Мне кажется, что вы хотите проверить, есть ли X-сервер для подключения.

Что-то типа:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
Стефан Шазелас
источник
1
У меня никогда не было трех идеальных ответов на stackexchange.
Джон Бабер-Лусеро
9

Если вы хотели отличить интерактивные оболочки от неинтерактивных, используйте 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
lynxlynxlynx
источник
У меня никогда не было трех идеальных ответов на stackexchange.
Джон Бабер-Лусеро
7

Это будет зависеть от операционной системы. Для 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 в различных используемых вами приложениях и установите их соответствующим образом.

teppic
источник
У меня никогда не было трех идеальных ответов на stackexchange.
Джон Бабер-Лусеро