Виявити, якщо працює у віртуальному терміналі?


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.
kiri

1
Не потрібно виключати X: якщо сценарій працює в емуляторі терміналу під X, ttyпокаже псевдотермінал емулятора термінала, а не фізичний термінал, на якому працює X.
Жил 'SO- перестань бути злим'

5

Зазвичай достатньо просто протестувати STDIN (FD0):

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

Гаразд, тому що .bash_profileвикликається оболонками входу, а звичайний вхід у графічний інтерфейс не має терміналу, тому єдиною оболонкою входу в термінал має бути tty. Гарна знахідка
kiri

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

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