Обнаружить, если работает в виртуальном терминале?


12

Я хотел бы автовход , чтобы tty1при входе в систему , а затем использовать , vlockчтобы зафиксировать ее.

Как я могу определить из Bash, является ли текущий терминал консольным виртуальным терминалом (например tty1), чтобы я мог подключить vlockлинию .bash_profileи запустить ее только при входе через tty1?


1
Я думаю, что вы должны изменить заголовок на «Обнаружить, если работает в виртуальном терминале», потому что ttyможет быть неправильно истолкован как означающий, что текущая оболочка подключена к псевдотерминальному устройству.
Джозеф Р.

@JosephR. Спасибо за указание на это, исправлено
kiri

@JosephR: плохой звонок. Псевдо-терминальное устройство является р  ти, а не терминал. О том, чтобы вернуться к первоначальному названию.
Incnis Mrsi

Ответы:


14

Вы можете использовать, ttyчтобы получить имя текущего виртуального терминала, а затем проверить его с помощью caseинструкции:

#!/bin/sh

case $(tty) in /dev/tty[0-9]*)
    vlock ;;
esac

Еще лучше, вместо того, чтобы предполагать, что все оболочки входа в систему терминала являются ttys.
Кири

1
Не нужно исключать X: если скрипт выполняется в эмуляторе терминала под X, ttyбудет показан псевдотерминал эмулятора терминала, а не физический терминал, на котором запущен X.
Жиль "ТАК - перестань быть злым"

5

Обычно достаточно просто проверить STDIN (FD0):

[ -t 0 ] && echo "TTY available" || echo "No TTY available"

Хорошо, потому что .bash_profileвызывается в оболочках входа в систему, и при обычном входе в систему с графическим интерфейсом пользователя нет терминала, поэтому единственная оболочка входа в систему терминала должна быть tty. Хорошая находка
Кири

1
Если этот фрагмент был включен в более крупный сценарий, чей stdin был перенаправлен из файла, он сообщал бы, что TTY недоступен, даже если он запускается из VT.
Джозеф Р.

1
@JosephR Правильно. Значение часто задается с помощью cronили atзаданий, чтобы избежать сбоев, когда сценарии предполагают интерактивный ввод.
JRFerguson
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.