Intereting Posts
Использование регулярных выражений в строке перенаправления / добавления heredocument для определения целевых «наборов» каталогов Пределы дескриптора файла теряются после перезагрузки системы. Разве что Debian stretch / sid является неустойчивой версией? Как сохранить распечатку последней команды в переменной оболочки в urxvt / zsh? Как просматривать выходные данные для ВСЕХ процессов одновременно? Двойная загрузка linux mint 17 с Windows 8 GLIBC не загружается даже после компиляции источника Говорит ли BTRFS, что мой жесткий диск мертв? Смарт-карты и eCryptFS Как подсчитать количество строк для определенного типа файла в сжатом файле tgz? Различия между Debian и Ubuntu GNOME? Запрос удаленного почтового сервера POP3 с использованием BASH Извлеките путь к каталогу, содержащий файл с соответствующей строкой Разница между «эхом» и «эхом -e» iptables и проблема политики маршрутизации источника

Как проверить, находится ли текущий сеанс оболочки в графическом интерфейсе или tty

Какой параметр среды в оболочке zsh позволит мне определить, нахожусь ли я на x-сервере или на консоли? Я пытаюсь найти способ реализовать различные настройки в моем .zshrc для каждого случая, когда я нахожусь в моем эмуляторе терминала и когда я нахожусь в моем tty / console

В основном я буду иметь,

(Псевдокод)

if(current shell session is in console) [ implement PROMPT x ]else[ implement PROMPT Y ] 

Я думаю, что было бы проще проверить, называется ли текущий tty как локальные консоли:

 case $(tty) in (/dev/tty[1-9]) PS1='console version';; (*) PS1='not console version';; esac 

Это только один способ проверить результат; Вы можете использовать grep или расширение параметров, но это показывает идею.

Вы могли бы дополнительно проверить $DISPLAY , но это не гарантия, и я не могу представить, что вы будете делать в приглашении оболочки, для которого потребуется среда X11.

Благодаря @Ignacio Vazquez-Abrams и @Jeff Schaller (и другим комментариям ниже) я понял, что $ DISPLAY – это переменная окружения, в которой я нуждался. Если вы находитесь на сервере отображения, значение, хранимое в $ DISPLAY, будет равно 0 и будет возвращено (как-то). Следовательно, следующий код (должен?) Работает:

 if [[ -n $DISPLAY ]]; then PROMPT = (etc) else PROMPT = (etc2) fi 

Спасибо всем.

Когда вы работаете на консоли, вы впервые входите в систему.
Так что, если вы ищете логин, вы можете знать, где вы находитесь.

Вы можете попробовать это:

 [ "$(ps -t $(ps -o comm= -o tty= | \ awk '$1=="ps"{print $2}') | \ grep [l]ogin)" ] && \ echo "console" || echo "terminal"