Деякі з моїх сценаріїв (зміна картки, додавання відкритого ключа) повинні діяти по-різному, коли у віртуальній консолі порівняно з xterm. Для чого справжній код
#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
Деякі з моїх сценаріїв (зміна картки, додавання відкритого ключа) повинні діяти по-різному, коли у віртуальній консолі порівняно з xterm. Для чого справжній код
#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
Відповіді:
Мені це здається, ніби ви хочете перевірити, чи є X-сервер, до якого потрібно підключитися.
Щось на зразок:
if [ -n "$DISPLAY" ]; then
: X
else
: no X
fi
Якщо ви мали намір відрізнити інтерактивні від неінтерактивних оболонок, використовуйте 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
Це буде залежати від операційної системи. Для 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 у різних програмах, які ви використовуєте, і встановіть відповідні.