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

12

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

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

харакири
источник
1
Я думаю, что вы должны изменить заголовок на «Обнаружить, если работает в виртуальном терминале», потому что ttyможет быть неправильно истолкован как означающий, что текущая оболочка подключена к псевдотерминальному устройству.
Джозеф Р.
@JosephR. Спасибо за указание на это, исправлено
kiri
@JosephR: плохой звонок. Псевдо-терминальное устройство является р  ти, а не терминал. О том, чтобы вернуться к первоначальному названию.
Incnis Mrsi
Связанный: unix.stackexchange.com/questions/16387/…
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"
JRFerguson
источник
Хорошо, потому что .bash_profileвызывается в оболочках входа в систему, и при обычном входе в систему с графическим интерфейсом пользователя нет терминала, поэтому единственная оболочка входа в систему терминала должна быть tty. Хорошая находка
Кири
1
Если этот фрагмент был включен в более крупный сценарий, чей stdin был перенаправлен из файла, он сообщал бы, что TTY недоступен, даже если он запускается из VT.
Джозеф Р.
1
@JosephR Правильно. Значение часто задается с помощью cronили atзаданий, чтобы избежать сбоев, когда сценарии предполагают интерактивный ввод.
JRFerguson