Як мій сценарій може знати, коли я перебуваю у віртуальній консолі проти 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

Мені ніколи не доводилося мати три ідеальні відповіді на зміну 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.