GNU ekranı durum satırını ana bilgisayar adına göre nasıl değiştirirsiniz?


31

Oturum açtığım tüm UNIX sunucularında NFS üzerinden otomatik olarak paylaşılan paylaşılan bir giriş dizinim var. Üretime karşı ne zaman oturum açacağımı belirtmek için (örneğin) ana bilgisayar adını hardstatus satırına farklı bir renkte koyan tek bir .screenrc'ye sahip olmak istiyorum; host isimlerimiz, kalıp eşleştirmesi kullanılarak kolayca yapılabilir.

Koşullu ifadeleri .screenrc içine koymanın bir yolu var mı? Man sayfa hızlı bir grep bariz bir şey ortaya koyuyor görünmüyor.

DÜZENLE:

Netleştirmek için zaten özel bir zor durum hattım var; Ekranın çağrıldığı ana bilgisayar adına bağlı olarak görüntülenen renklendirme / alanların bazılarını değiştirmek istiyorum. PS1'im için zaten böyle bir şeye sahibim, ancak bu ana bilgisayarlardan yönlendiricilere / anahtarlara atladığım için ekran durum satırında yapmayı tercih ediyorum, bu da herhangi bir istemde renklendirme yapmama izin vermiyor. Bu şekilde, bir bakışta hangisinde olduğumu söyleyen ekran durum satırının rengiyle bir tane üretim için bir tane de geliştirme için bir pencere alabilirim.


Ekranın çalıştığı makinenin ana bilgisayar adı? Ya da o belirli ekranın "pencere" nin ana bilgisayar adı kullanılıyor mu?
Kyle Brandt

@Kyle: Ekranın çalıştığı makinenin ana bilgisayar adı. Biraz daha ayrıntılı bilgi için güncellenmiş soruya bakın.
Murali Suriar

Yanıtlar:


13

Bunu yapmanın iki yolunu görüyorum, ilki ana bilgisayar tarafından bir .screenrc dosyası oluşturmak.
Gibi .screenrc_serverA,, .screenrc_serverB...
Kabuk başlangıç ​​komut dosyasında SCREENRC gibi bir şeye ayarlanmış .screenrc_`hostname`
Elbette, ekranın kaynak komutunu kullanarak .screenrc_default, her bir özel .screenrc_… dosyasında olduğu gibi bir şey eklemek için ekranın kaynak komutunu kullanabilirsiniz . her seferinde tüm konfigürasyon.

İkinci yol screen -X hardstatus lastline ..., kabuk başlangıç ​​betiğinizde (ana bilgisayar adına bağlı olarak ... için farklı değerde komutu çalıştırmak için sınamalar kullanılması) gibi komutları çalıştırmaktır. Sunucuya giriş yapacağınız zaman, ekran -X hiçbir şey yapmaz çünkü ekran henüz açılmayacaktır, fakat ekranda her yeni pencereyi açtığınızda hardstatus güncellenecektir.

Elbette 1. çözüm daha iyidir çünkü ikincisi, ana bilgisayar adı değişmeyeceğinden muhtemelen işe yaramaz bir haber penceresi açtığınızda hardstatus hattını yenileyecektir.


".Screenrc_hostname" okuduğunuzda ".screenrc_ hostname" okuyun . Ben sonrası içinde `dahil etmek sorun var
yarıçap

Nice - Man sayfasındaki SCREENRC ortam değişkeni aranan ilk bölümü özledim.
Murali Suriar

@radius Bu öneriyi kullanarak backticks ekleyebildim: meta.stackexchange.com/a/70679/167351
Bruno Bronosky

16

@radius, SCREENRC olayıyla ilgiliydi, ama çok tam bir cevap değildi, bu yüzden detaylandırırım…

~ / .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
# e.g. ~/.screenrc_bowser would get used instead of ~/.screenrc_prod
[[ -f "~/.screenrc_$hostname" ]] && export SCREENRC="~/.screenrc_$hostname"

* Her zaman yeni testler kullanın !

Kaçış karakterleriyle ilgili bir kelime

Renkleri komut dosyalarına eklemenin doğru yolu, karakterlerden kaçış değil, tput'tur. Kaçış karakterleriniz terminalinize özeldir. Tput komutu terminalden haberdardır. Bunu senaryomda beğenmem gerektiğinde yazdım:

~ / 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

Ayrıca tput kullanımını göstermek için bir senaryo yaptım. Bunu bu özlemden alabilirsiniz.

Bakınız:
http://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=105AGY06
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html


1
İki "tutarsızlık" buldum. Birincisi, arka plan için setafde kullanılması, gerçekte setab( f yerine b yerine ) olması ve ikincisi de varsayılan olarak kullanılmasının benim için çalışmadığı, belki de tput-sürümü standart olmadığı için (ya davası ya da benimkide, sadece bilmiyorum ve çok da önemli değil)9
Gölge

@Shadow bunu yakaladığın için teşekkürler. Düzeltdim.
Bruno Bronosky

5

Sadece .screenrc içine hardstatus değişkeni olarak ayarlayın. Ana bilgisayar adı için% H gibi bir değişken kullandığınız sürece, üzerinde çalıştığınız herhangi bir ana bilgisayar adıyla eşleşecek şekilde değişecektir.

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

Size benzeyen altta bir durum satırı verecek

ekran hardstatus örneği

hostname siyah üzerine kırmızı, saat siyah üzerine yeşil, tarih siyah üzerine sarıdır. * ile işaretlenen pencere, beyaz zemin üzerine mavi metinle gösterilen geçerli penceredir. - ile işaretlenen pencere, daha önce aktif olan ve siyah üzerine beyaz metin gösteren bir penceredir. Yukarıdaki pencere 1, mevcut veya önceki değil ve siyah üzerine beyaz olarak gösterilir. diğer olasılıklar size pencerelere bağlı, siyah üzerine beyaz ve + ile işaretlenmiş diğer kullanıcıları gösterir.

Ekranı çalıştırmak için uzak sunuculara ssh yaparsanız zaman göstergesinin canlı kalmasına yardımcı olur, çünkü her dakikayı değiştiren saat, kabuk uzak tarafta boş olsa bile oturumunuzu canlı tutar.


Bu, ana bilgisayar adını yapısına bağlı olarak koşullu olarak biçimlendirmeme izin vermiyor (örneğin mavi '-dev' ile biten herhangi bir ana bilgisayar adı, kırmızı '-prod' ile biten herhangi bir ana bilgisayar adı)
Murali Suriar

Ah. Eğer sadece screenrc if-ifadeleri regex'i destekliyorsa.
Tim Kennedy

4

Durum satırını yazdırarak \005{..r}veya benzer şekilde ( rkırmızı renkte vb. İçin) bir backtick betiğinin içinden renklendirebilirsiniz .screenrc, böylece ana bilgisayar adının bir sayıya gelmesi için hash olabilir veya ayarlamak için birkaç koşullu deyim alabilirsiniz. renk. Örnek olarak, rengini değiştirmek ve ekran adını kullanmak için ana bilgisayar adını yazdırmak için bir komut dosyası:

#!/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

Daha sonra bu betiğe bir giriş ekleyin .screenrcve hardstatus veya başlığın içine% 4` olarak referans verin:

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

Bu, ana bilgisayar adının değişmesi muhtemel olmadığını, bu nedenle 1 saatlik (3600 saniye) zaman aşımını ve geçerliliğini varsayar; çağrıyı tersine çevreleyen bitler, tarihi satırın başlangıcına ve ana bilgisayar adından sonraki zamana koyar.

Bu mekanizmayı, bir akü şarj seviyesinin değerine, sistem yüküne veya sıcaklığa bağlı olarak bir komut dosyasının çıktısını renklendirmek için bile kullanabilirsiniz;


screenKaçıştan bahsetmek için +1 \005- bu şekilde tüm koşullu biçimlendirme, ayrıştırılması zor captionyanıtlar yerine çok daha okunabilir bir kabuk komut dosyasına eklenebilir . hardstatusekran direktifleri.
ckujau

1

Çok fazla komut dizisinden kaçınmak istiyorsanız şunu deneyebilirsiniz:

backtick 5 99999 99999 grep prod /etc/hostname
caption always "%?%{.R.}%5`%:%H%?"

o "eşya" eşleşirse bir backtick ve o fiş böylece grep sadece hostname yazdırır %?yapı. Viyola!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.