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