Как изменить строку состояния экрана GNU на основе имени хоста?

У меня есть общий домашний каталог, который автомонтируется через NFS на всех серверах UNIX, в которые я вхожу. Я хотел бы иметь один .screenrc, который (например) помещает имя хоста в строку hardstatus другого цвета, чтобы указать, когда я вошел в систему производства или разработки; наши имена хостов таковы, что это можно легко сделать с помощью сопоставления шаблонов.

Есть ли способ включить условные выражения в .screenrc? Быстрый grep страницы руководства, кажется, не показывает ничего очевидного.

РЕДАКТИРОВАТЬ:

Чтобы уточнить, у меня уже есть обычная жесткая строка состояния; Я хочу изменить некоторые цвета / поля, отображаемые на основе имени хоста, на котором вызывается экран. У меня уже есть что-то вроде этого для моего PS1, однако я бы предпочел сделать это в строке состояния экрана, когда я перехожу от этих хостов к маршрутизаторам / коммутаторам, которые не позволяют мне делать какое-либо быстрое цветовоспроизведение. Таким образом, у меня может быть одно окно для производства, а другое – для разработки, с цветом строки состояния экрана, сообщающей мне, с каким я на первый взгляд.

4 Solutions collect form web for “Как изменить строку состояния экрана GNU на основе имени хоста?”

Я вижу два способа сделать это, первый из них – сделать файл .screenrc хостом.
Как .screenrc_serverA , .screenrc_serverB , …
В сценарии запуска оболочки установите SCREENRC на что-то вроде .screenrc_`hostname`
Конечно, вы можете использовать исходную команду экрана, чтобы включить что-то вроде .screenrc_default в каждый пользовательский файл .screenrc_ …, чтобы каждый раз содержал строку caption / hardstatus, а не всю конфигурацию.

Второй способ – выполнить команды, такие как screen -X hardstatus lastline ... (используя, если тесты для выполнения команды с различным значением для … в зависимости от имени хоста) в сценарии запуска оболочки. Когда вы войдете на сервер, экран -X ничего не сделает, потому что экран еще не будет запущен, но каждый раз, когда вы открываете новые окна на экране, hardstatus будет обновляться.

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

@radius находится на месте с SCREENRC, но это был не очень полный ответ, поэтому я подробно рассмотрю …

~ / .bashrc

 # Strip down a FQDN hostname="$(hostname | sed 's/\..*//')" # Use the case pattern for server groups case "$hostname" in mario|luigi|toad|peach|koopa*|bowser) export SCREENRC=~/.screenrc_prod;; dev*|vm*) export SCREENRC=~/.screenrc_dev;; esac # Use condensed bash "new test*" notation to override for specific servers # eg ~/.screenrc_bowser would get used instead of ~/.screenrc_prod [[ -f "~/.screenrc_$hostname" ]] && export SCREENRC="~/.screenrc_$hostname" 

* Всегда используйте новые тесты !

Слово о escape-символах

Правильный способ включения цветов в сценарии – это tput, а не escape-символы. Ваши escape-символы относятся к вашему терминалу. Команда tput знает о терминале. Я написал это для того, чтобы мне понравилось в моих сценариях:

~ / Bin / COLORS.sh

 GT_RESET=$( tput sgr0) # Reset all attributes GT_BRIGHT=$( tput bold) # Set “bright” attribute GT_DIM=$( tput dim) # Set “dim” attribute (normal/non-bright) GT_ULINE=$( tput smul) # Set “underscore” (underlined text) attribute GT_BLINK=$( tput blink) # Set “blink” attribute GT_INVERSE=$( tput rev) # Set “inverse” attribute GT_HIDDEN=$( tput invis) # Set “hidden” attribute FG_BLACK=$( tput setaf 0) #foreground to color #0 - black FG_RED=$( tput setaf 1) #foreground to color #1 - red FG_GREEN=$( tput setaf 2) #foreground to color #2 - green FG_YELLOW=$( tput setaf 3) #foreground to color #3 - yellow FG_BLUE=$( tput setaf 4) #foreground to color #4 - blue FG_MAGENTA=$( tput setaf 5) #foreground to color #5 - magenta FG_CYAN=$( tput setaf 6) #foreground to color #6 - cyan FG_WHITE=$( tput setaf 7) #foreground to color #7 - white BG_BLACK=$( tput setab 0) #background to color #0 - black BG_RED=$( tput setab 1) #background to color #1 - red BG_GREEN=$( tput setab 2) #background to color #2 - green BG_YELLOW=$( tput setab 3) #background to color #3 - yellow BG_BLUE=$( tput setab 4) #background to color #4 - blue BG_MAGENTA=$( tput setab 5) #background to color #5 - magenta BG_CYAN=$( tput setab 6) #background to color #6 - cyan BG_WHITE=$( tput setab 7) #background to color #7 - white 

Я также написал сценарий, чтобы продемонстрировать использование tput. Вы можете получить это из этого суждения.

Видеть:
http://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=105AGY06
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html

Просто установите его в свой .screenrc как переменную hardstatus. Пока вы используете переменную типа% H для имени хоста, она изменится в соответствии с любым именем хоста, на котором вы работаете.

 hardstatus alwayslastline "%{rk}%H %{gk}%c %{yk}%M%d %{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw%?" 

Дает вам строку статуса внизу, которая выглядит как

Экранный пример hardstatus

имя хоста красное на черном, время зеленое на черном, дата желтого цвета на черном. окно, помеченное знаком *, – это текущее окно, которое отображается синим текстом на белом фоне. window, отмеченное знаком – это ранее активное окно, на белом – белый текст. window 1, выше, не является ни текущим, ни предыдущим, и будет отображаться белым на черном. другие возможности покажут вам других пользователей, прикрепленных к окнам, белого на черном и отмеченных +.

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

Вы можете покрасить строку состояния из сценария обратного хода, напечатав \005{..r} или аналогичный ( r для красного и т. Д., Как и в самом .screenrc ), так что вы можете либо хэш-имя хоста, чтобы прийти к числу, или просто иметь кучу условных операторов для установки цвета. В качестве примера, вот сценарий для изменения цвета и печати имени хоста для использования на экране:

 #!/bin/bash Red="\005{..r}" Yellow="\005{..y}" Green="\005{..g}" Blue="\005{..b}" Magenta="\005{..m}" Cyan="\005{..c}" White="\005{..w}" case "$HOSTNAME" in lubuntu-eee) echo -e "$Magenta$HOSTNAME" ;; ubuntu-pc) echo -e "$Magenta$HOSTNAME" ;; *) echo -e "$Green$HOSTNAME" esac 

Затем вы добавляете запись для этого скрипта в .screenrc и ссылаетесь на него в hardstatus или в заголовке как% 4`:

 backtick 4 3600 3600 /usr/local/bin/screen_hostname caption always "%{.kc}%D %d.%m.%Y %=%{.kg} %4` %{.kc}%0c" 

Это предполагает, что имя хоста вряд ли изменится, следовательно, тайм-аут и срок действия 1 час (3600 секунд); биты, окружающие вызов самого обратного звонка, просто помещают дату в начало строки и время после имени хоста.

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

  • Сообщение emacsclient отказано
  • Почему «» не отображается в сообщении о статусе демона при использовании экрана GNU?
  • Экспортировать содержимое демон экрана в файл
  • Экран, используемый экраном в utmp
  • После сбоев и блокировок последовательного порта ttyUSB0 требуется перезагрузка компьютера
  • Как отправить входной текст в экранную консоль?
  • Проблемы с автоматическим запуском экрана при входе в SSH
  • Автоматически обновлять билеты на kerberos на экране GNU
  • Изменить тип терминала для экрана по последовательному соединению
  • Доступ к экранам назад и вперед через скрипт bash
  • Как запустить streamripper и mplayer в терминале X с раздельным экраном, используя один скрипт
  • Interesting Posts

    Какова самая базовая версия Linux с пакетом-менеджером?

    удалить содержимое с начала на первую пустую строку

    Громкость микрофона на звуковой карте USB очень низкая, параметры snd_usb_audio?

    Несколько конфигурационных файлов для Net-SNMP для упрощения управления MIBS

    Проверьте, содержит ли текст символы, отличные от ASCII, в сценарии оболочки

    Как получить значение именованного параметра уже запущенного процесса в Linux?

    Храните ту же ширину среднего столбца в макете ThreeColMid в xmonad

    Arch Linux – Boot только показывает EFI Default Loader, который не работает

    Удаление номеров строк с выхода `od`

    Загрузка с raid'ed> дисков 2GB, btrfs, обработка раздела загрузки BIOS

    Странная задержка / временное замораживание при запуске / использовании xterm

    Как я могу решить: нет такого файла или каталога?

    Использование preseed (Debian / Ubuntu) для разделения RAID и шифрования

    Что происходит, когда я закрываю () файловый дескриптор?

    Объединение двух файлов для монтирования файловой системы внутри них

    Linux и Unix - лучшая ОС в мире.