Mam wspólny katalog domowy, który jest automatycznie montowany przez NFS na wszystkich serwerach UNIX, na których loguję się. Chciałbym mieć jeden plik .screenrc, który (na przykład) umieszcza nazwę hosta w linii hardstatus w innym kolorze, aby wskazać, kiedy jestem zalogowany do produkcji w porównaniu do rozwoju; nasze nazwy hostów są takie, że można to łatwo zrobić za pomocą dopasowania wzorca.
Czy jest jakiś sposób na umieszczenie instrukcji warunkowych w .screenrc? Szybki przegląd strony podręcznika nie wydaje się oczywisty.
EDYTOWAĆ:
Aby to wyjaśnić, mam już niestandardową twardą linię statusu; Chcę zmienić niektóre wyświetlane kolory / pola w oparciu o nazwę hosta, na którym wywoływany jest ekran. Mam już coś takiego dla mojego PS1, jednak wolę to zrobić w linii statusu ekranu, kiedy skaczę z tych hostów do routerów / przełączników, które nie pozwalają mi na szybkie kolorowanie. W ten sposób mogę mieć jedno okno do produkcji, a drugie do rozwoju, a kolor linii statusu ekranu mówi mi, które z nich mam na pierwszy rzut oka.
źródło
Odpowiedzi:
Widzę dwa sposoby, aby to zrobić, pierwszy to utworzenie pliku .screenrc przez hosta.
Jak
.screenrc_serverA
,.screenrc_serverB
...W skrypcie startowym shell set screenrc do czegoś podobnego
.screenrc_`hostname`
Oczywiście można użyć polecenia source ekranu zawierać coś takiego
.screenrc_default
w każdym niestandardowym .screenrc_ ... pliki tak, że zawiera tylko podpis / twardego statusu linii i nie za każdym razem cała konfiguracja.Drugim sposobem byłoby wykonanie poleceń takich jak
screen -X hardstatus lastline ...
(przy użyciu testów if do wykonania polecenia o innej wartości dla ... w zależności od nazwy hosta) w skrypcie startowym powłoki. Kiedy zalogujesz się na serwerze, screen -X nic nie zrobi, ponieważ screen nie zostanie jeszcze uruchomiony, ale za każdym razem, gdy otworzysz nowe okno na ekranie, status dysku twardego zostanie zaktualizowany.Oczywiście pierwsze rozwiązanie jest lepsze, ponieważ drugie odświeża linię hardstatus za każdym razem, gdy otwierasz okna wiadomości, co prawdopodobnie jest bezużyteczne, ponieważ nazwa hosta się nie zmieni.
źródło
hostname
”. Mam problem z dołączeniem `do postu@radius zajmuje się SCREENRC, ale nie była to bardzo kompletna odpowiedź, więc opracuję…
~ / .bashrc
* Zawsze używaj nowych testów !
Słowo o postaciach ucieczki
Właściwy sposób umieszczania kolorów w skryptach to tput, a nie znaki specjalne. Twoje znaki specjalne są specyficzne dla twojego terminala. Polecenie tput rozpoznaje terminal. Napisałem to na potrzeby, gdy muszę się zachwycać w swoich skryptach:
~ / bin / COLORS.sh
Zrobiłem też skrypt, aby zademonstrować użycie tput. Możesz to zdobyć z tej treści.
Zobacz:
http://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=105AGY06
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html
źródło
setaf
jest używany, chociaż powinien to byćsetab
( b zamiast f ), a drugi to, że używanie9
domyślnie nie działa dla mnie, może dlatego, że wersja tput nie jest standardowa (albo w jego sprawa lub moja, po prostu nie wiem i to naprawdę nie ma większego znaczenia)Po prostu ustaw go w swoim .screenrc jako zmienną hardstatus. Tak długo, jak używasz zmiennej takiej jak% H dla nazwy hosta, zmieni się ona tak, aby pasowała do dowolnej nazwy hosta nad którą pracujesz.
Daje ci linię statusu na dole, która wygląda
nazwa hosta jest czerwona na czarnym tle, czas jest zielony na czarnym tle, data jest żółta na czarnym tle. okno oznaczone * to bieżące okno, pokazane niebieskim tekstem na białym tle. okno oznaczone - jest wcześniej aktywnym oknem, pokazanym białym tekstem na czarnym tle. okno 1 powyżej nie jest ani bieżące, ani poprzednie i będzie pokazane na biało na czarno. inne możliwości pokazałyby innym użytkownikom podłączonym do okien, biało-czarnym i oznaczonym znakiem +.
wyświetlanie czasu pomaga również utrzymać przy życiu, jeśli ssh do zdalnych serwerów, aby uruchomić ekran, ponieważ zmiana czasu co minutę utrzyma sesję przy życiu, nawet jeśli powłoka jest bezczynna po stronie zdalnej.
źródło
Możesz pokolorować linię statusu z poziomu skryptu wstecznego, drukując
\005{..r}
lub w podobny sposób (r
dla czerwonego itp., Tak jak w samym.screenrc
sobie), więc możesz albo haszować nazwę hosta, aby uzyskać liczbę, albo po prostu mieć kilka instrukcji warunkowych do ustawienia kolor. Jako przykład, oto skrypt do zmiany koloru i wydrukowania nazwy hosta do użycia na ekranie:Następnie dodajesz wpis do tego skryptu
.screenrc
i odwołujesz się do niego w twardym statusie lub podpisie jako% 4`:Zakłada się, że nazwa hosta prawdopodobnie nie ulegnie zmianie, stąd limit czasu i ważność 1 godziny (3600 sekund); bity otaczające wywołanie do samego backticka po prostu umieszczają datę na początku linii i godzinę po nazwie hosta.
Możesz nawet użyć tego mechanizmu do pokolorowania wyniku skryptu w zależności od wartości poziomu naładowania baterii, obciążenia systemu lub temperatury, zakładając, że masz dostęp do odpowiednich wartości ze skryptu powłoki.
źródło
screen
ucieczce\005
- w ten sposób całe formatowanie warunkowe można umieścić w znacznie bardziej czytelnym skrypcie powłoki zamiast tych, które już są trudne do przeanalizowaniacaption
.hardstatus
dyrektywy ekranowe.Jeśli chcesz uniknąć wielu skryptów, możesz spróbować:
grep wypisze nazwę hosta tylko, jeśli pasuje do „prod”, więc możesz podłączyć ją do backsticka i
%?
konstruktu. Altówka!źródło