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


11

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

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

Ответы:



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

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


У меня никогда не было трех идеальных ответов на stackexchange.
Джон Бабер-Лусеро
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.