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

попробуйте

awk -F\| -v select="$var" '$2 == select { print $4;}' config_file

, где

  • $ var содержит поле, которое вы хотите выбрать
  • -F\| сообщите awk для использования | в качестве разделителя, | (pipr) должно быть удалено.
  • -v select = «$ var» передать $ var в переменную awk (select)
  • $2 = = select select line, второй arg которой - «$ var» или select.
  • {печать $4;} печать четвертого поля.
-121--228528-
: command not found

Это означает, что команда, предоставленная в качестве условия в инструкции if, не найдена. Эта команда «» является пустой последовательностью и поэтому не найдена; такой команды нет.

Согласно странице bash вручную, синтаксис оператора if должен выглядеть следующим образом:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

Список представляет собой последовательность из одного или нескольких конвейеров, разделенных одним из операторы;, &, & & или | |, и, при необходимости, завершаются одним из;, &, или.

Таким образом, в приведенном выше операторе if выполняется список, и возвращается код выхода 127, а ошибка указывает на то, что команда не найдена. Затем это оценивается как ложь, поэтому выполняется блок else.


Может потребоваться следующее:

if false; then echo FOUND; else echo NOT; fi
-121--85882-

Количество мест - это способ косметического разделения столбцов/полей. Это не имеет никакого другого значения. То есть , количество пробела между столбцами не имеет значения .

Пространство между столбцами состоит из пробелов (включая вкладки), а сами столбцы, например, разделенные запятыми параметры, не должны содержать пробелов без кавычек.

Со страницы fstab (5) :

Поля

[...] в каждой строке разделены вкладками или местами.

и

Если имя точки подключения содержит места, их можно удалить как '\040 '.

Пример

При следующем выравнивании линий с использованием только одной вкладки становится трудно достичь. В конце концов, fstab без белого космоса выглядит более смешным, чем то, что вы считаете недовольным сейчас.

/dev/md3 /data/vm btrfs defaults 0   0
/var/spool/cron/crontabs /etc/crontabs bind defaults,bind
//bkpsrv/backup /mnt/backup-server cifs iocharset=utf8,rw,credentials=/etc/credentials.txt,file_mode=0660,dir_mode=0770,_netdev

Вы все еще видите «столбцы»?

2
24.06.2018, 22:33
3 ответа

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

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

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

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

2
27.01.2020, 22:02

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

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

Всем спасибо.

1
27.01.2020, 22:02

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

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

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

Теги

Похожие вопросы