Как изменить строку состояния экрана 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 секунд); биты, окружающие вызов самого обратного звонка, просто помещают дату в начало строки и время после имени хоста.

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

  • Как выделить результат поиска в tmux?
  • Выполнение нескольких команд в режиме разделения экрана
  • screen & xterm: как выбрать текст с помощью мыши в одной панели, когда окно разделено по вертикали
  • экрана по сравнению с открытием виртуальных консолей
  • Как сохранить вывод отдельного экрана со сценарием?
  • Отправить файл по протоколу xmodem или kermit с экраном GNU
  • Как отправить входной текст в экранную консоль?
  • Очистка экрана GNU после полноэкранного приложения
  • Как узнать, когда закончится работа на экране?
  • Что такое текстовая команда для именования окна в gnu-screen?
  • Предотвратите завершение сеанса GNU-экрана после того, как пользователь будет убит пользователем
  • Как отключить экран GNU от внесения изменений в заголовок окна шпатлевки
  • Interesting Posts

    Как активировать текущий сеанс в ConsoleKit?

    Отправить команду DXY-GL на принтер

    Выбрать между заданными символами в vim

    Bash: изменить переменную, определенную в верхней части скрипта

    xf86EnableIOPorts: не удалось установить IOPL для ввода-вывода (операция не разрешена)

    Получить согласованную кодировку для всех файлов в каталоге

    Я немного новичок в Linux, может ли ОС Linux полностью освоиться благодаря эксклюзивному использованию Хали?

    Заменяйте строки, соответствующие шаблону, строками из другого файла в порядке

    Как получить запись истории для правильного отображения на нескольких строках

    (CentOS-6.5) Как реализовать эскалацию привилегий среды GNOME как GKSUDO?

    Скрипт с несколькими арифметическими условиями не работает

    Сравните два списка URL-адресов и распечатайте недавно добавленные URL-адреса в новый файл

    Что происходит в Bash после вызова выхода?

    Есть ли способ узнать размер страницы SSD на Linux / Unix? Что такое «физический блок» в выводе fdisk?

    Какое программное обеспечение wiki использует CentOS.org?

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