Как определить, что bash-скрипт запущен на «консоли», а не в сеансе удаленного терминала?

Как определить, что bash-скрипт запущен на «консоли», а не в сеансе удаленного терминала?

Как определить, что скрипт bash запущен на 'console', а не в сеансе удаленного терминала? Я думаю, что есть какой-то способ определить, что скрипт запущен на /dev/console? Или я лаю на неправильное (бинарное) дерево?

решение1

Это звучит как возможноеПроблема XY.

Старая команда Unix ttyможет сказать вам, на каком устройстве находится ваш терминал. Так что что-то вроде этого может сделать то, о чем вы просите:

if [ $(tty) = "/dev/console" ]; then
    echo "Yes, I am on the console."
else
    echo "No, I am not on the console."
fi

Однако,программа, запущенная в сеансе входа в виртуальную консоль Linux, может вместо этого увидеть /dev/tty1или похожее. Если используется последовательная консоль, вы можете увидеть /dev/ttyS0или другое устройство последовательного порта. Единственные случаи, когда вы можете увидеть литерал, /dev/consoleмогут быть при запуске в аварийном режиме оболочки/однопользовательском режиме. Знание того, какие устройства могут быть допустимыми консолями, не является тривиальным; это часть причины, по которой /etc/securettyсуществует и настраивается системным администратором.

(Если вы решили отклонить последовательные порты, системный администратор где-то пытается использовать последовательное соединение по локальной сети для исправленияочень(Удаленная система может вас ненавидеть.)

Если процесс или скрипт запускается как systemdслужба, у него может вообще не быть TTY в традиционном смысле; вместо этого его стандартный вывод и стандартная ошибка будут подключены к systemdсредству ведения журнала , которое может передавать или не передавать их на консоль во время загрузки в зависимости от того, как настроена служба.

Пожалуйста, отредактируйте свой вопрос, чтобы уточнитьпочемуВы хотите знать, используете ли вы «консоль» или нет, чтобы мы могли попытаться найти способ получить ответ на ваш вопрос в том виде, который соответствует вашим реальным потребностям.

решение2

Если вы запустите ps axu, найдите в столбце TTY корневую «консоль», которую использует процесс.

У каждого процесса есть родительский процесс, работающий вплоть до корневого процесса init.

решение3

Исследуйте, с помощью diff, результаты env | sortв двух средах. $DISPLAYявляется одним для проверки.

Также читайте man isatty.

Связанный контент