होस्टनाम के आधार पर आप GNU स्क्रीन स्टेटस लाइन को कैसे बदल सकते हैं?


31

मेरे पास एक साझा घर निर्देशिका है जिसे मैं लॉग इन करने वाले सभी यूनिक्स सर्वरों पर एनएफएस के माध्यम से स्वचालित करता हूं। मैं एक सिंगलस्क्रीन करना चाहूंगा कि (उदाहरण के लिए) होस्टनाम को हार्डस्टैटस लाइन में एक अलग रंग में डालने के लिए इंगित करता हूं जब मैं उत्पादन बनाम विकास में लॉग ऑन होता हूं; हमारे होस्टनाम ऐसे हैं जो आसानी से पैटर्न मिलान के उपयोग के माध्यम से किए जा सकते हैं।

वहाँ .Crc में सशर्त बयान डालने का कोई तरीका है? मैन पेज का एक त्वरित grep कुछ भी स्पष्ट प्रकट नहीं करता है।

संपादित करें:

स्पष्ट करने के लिए, मेरे पास पहले से ही एक कस्टम हार्ड स्टेटस लाइन है; मैं होस्टनाम के आधार पर प्रदर्शित कुछ रंग / फ़ील्ड को बदलना चाहता हूं जो स्क्रीन पर लागू किया गया है। मेरे पास पहले से ही मेरे पीएस 1 के लिए कुछ ऐसा है, हालांकि मैं स्क्रीन स्टेटस लाइन में ऐसा करूंगा क्योंकि मैं इन मेजबानों से राउटर / स्विच तक कूदता हूं, जो मुझे किसी भी तरह के कोलीज़ेशन करने की अनुमति नहीं देते हैं। इस तरह, मेरे पास उत्पादन के लिए एक खिड़की हो सकती है, और विकास के लिए एक, स्क्रीन स्टेटस लाइन के रंग के साथ मुझे बता सकता है कि मैं किस पर नज़र रखता हूं।


स्क्रीन पर चल रही मशीन का होस्टनाम? या उस विशेष स्क्रीन 'होस्ट' का होस्ट नाम उपयोग कर रहा है?
काइल ब्रांट

@ काइल: स्क्रीन पर चल रही मशीन का होस्टनाम। अपडेट किए गए प्रश्न को थोड़ा और विस्तार से देखें।
मुरली सूरी

जवाबों:


13

मुझे ऐसा करने का दो तरीका दिखाई देता है, पहला है मेजबान द्वारा एक .screenrc फ़ाइल बनाना।
जैसे .screenrc_serverA, .screenrc_serverB...
आपकी शेल स्टार्टअप स्क्रिप्ट में SCREENRC को कुछ इस तरह सेट .screenrc_`hostname`
करें कि बेशक आप स्क्रीन के स्रोत कमांड का उपयोग .screenrc_defaultप्रत्येक रिवाज में कुछ ऐसी चीजों को शामिल करने के लिए कर सकते हैं। PDFrc_ ... फाइलें ताकि उनमें केवल एक कैप्शन / हार्डस्टैटस लाइन हो और नहीं। हर बार संपूर्ण कॉन्फ़िगरेशन।

दूसरा तरीका यह होगा कि screen -X hardstatus lastline ...अपने शेल स्टार्टअप स्क्रिप्ट में कमांड को निष्पादित करने के लिए (यदि टेस्ट कमांड को अलग-अलग मान के साथ निष्पादित करने के लिए ... होस्टनाम के आधार पर) का उपयोग किया जाए। जब आप सर्वर पर लॉग इन करेंगे, तो स्क्रीन -X कुछ नहीं करेगा क्योंकि स्क्रीन अभी तक लॉन्च नहीं की जाएगी, लेकिन हर बार जब आप स्क्रीन में एक नई विंडो खोलते हैं तो हार्डस्टैटस अपडेट हो जाएगा।

बेशक 1 समाधान बेहतर है, क्योंकि दूसरा जब आप समाचार विंडो खोलते हैं तो हर बार हार्डस्टैटस लाइन को रीफ्रेश किया जाएगा जो संभवतः बेकार है क्योंकि होस्टनाम नहीं बदला होगा।


जब आप ".rcrc_hostname" पढ़ते हैं तो ".rcrc_" पढ़ें hostname। मुझे 'पोस्ट में
त्रिज्या

नीस - मैं पहले खोजे जा रहे SCREENRC पर्यावरण चर के बारे में मैन पेज में भाग लेने से चूक गया।
मुरली सुरियार

@radius मैं इस सुझाव का उपयोग कर बैकटिक्स
ब्रूनो ब्रोंस्की

16

SCADENRC चीज़ के साथ @radius स्पॉट-ऑन है, लेकिन यह बहुत पूर्ण उत्तर नहीं था, इसलिए मैं विस्तृत करूँगा ...

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

* हमेशा नए परीक्षणों का उपयोग करें !

बच पात्रों के बारे में एक शब्द

लिपियों में रंगों को शामिल करने का उचित तरीका, टुट के साथ है, पात्रों से बचकर नहीं। आपके भागने के पात्र आपके टर्मिनल के लिए विशिष्ट हैं। 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

मैंने टुट के उपयोग को प्रदर्शित करने के लिए एक स्क्रिप्ट भी बनाई। आप इसे इस जिस्ट से प्राप्त कर सकते हैं।

देखें:
http://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=105AGY06
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/xn5.html


1
मुझे दो "असंगतताएं" मिलीं। पहला तथ्य यह है कि पृष्ठभूमि के लिए भी setafउपयोग किया जाता है, हालांकि यह होना चाहिए setab( च के बजाय बी ) और दूसरा यह कि डिफ़ॉल्ट के रूप में उपयोग करना मेरे लिए काम नहीं कर रहा है, हो सकता है क्योंकि tput- संस्करण मानक नहीं है (या तो में है) उसका मामला या मेरा, मुझे बस पता नहीं है और यह वास्तव में बहुत ज्यादा मायने नहीं रखता है)9
शैडो

@ कि पकड़ने के लिए धन्यवाद। मैंने इसे ठीक किया।
ब्रूनो ब्रोंस्की

5

बस इसे अपने .screenrc में हार्डस्टैट वेरिएबल के रूप में सेट करें। जब तक आप hostname के लिए% H जैसे वैरिएबल का उपयोग कर रहे हैं, यह आपके द्वारा काम करने वाले किसी भी होस्टनाम से मेल खाने के लिए बदल जाएगा।

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

आपको नीचे की तरफ एक स्टेटस लाइन देगा जो दिखता है

स्क्रीन हार्डस्टैट उदाहरण

होस्टनाम काले रंग पर लाल है, समय काला पर हरा है, तिथि काली पर पीली है। * के साथ चिह्नित विंडो वर्तमान विंडो है, जिसे सफेद पृष्ठभूमि पर नीले रंग के पाठ में दिखाया गया है। खिड़की के साथ चिह्नित - पहले से सक्रिय विंडो है, काले पर सफेद पाठ दिखाया गया है। खिड़की 1, ऊपर, न तो वर्तमान है, या पिछले है, और काले पर सफेद में दिखाया जाएगा। अन्य संभावनाएं आपको विंडोज़ से जुड़े अन्य उपयोगकर्ताओं को दिखाएंगी, काले पर सफेद, और + द्वारा चिह्नित किया जाएगा।

यदि आप स्क्रीन को चलाने के लिए दूरस्थ सर्वर पर ssh करते हैं, तो समय प्रदर्शन भी अलाइव रखने में मदद करता है, क्योंकि हर मिनट बदलते समय आपके सत्र को जीवित रखेगा, भले ही शेल दूरस्थ तरफ निष्क्रिय हो।


यही कारण है कि मुझे सशर्त इसकी संरचना के आधार पर होस्ट नाम फ़ॉर्मेट करने के लिए अनुमति नहीं देता है (जैसे किसी भी होस्ट नाम नीले रंग में '-dev' से समाप्त होने वाले किसी भी होस्ट नाम लाल रंग में '-prod' में समाप्त हो गया।)
मुरली Suriar

आह। यदि केवल स्क्रीन आर्क, यदि स्टेटमेंट्स रेगेक्स का समर्थन करता है।
टिम कैनेडी

4

आप एक बैकटिक स्क्रिप्ट के भीतर से \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और इसे हार्डस्टैटस या कैप्शन में% 4` के रूप में संदर्भित करते हैं:

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

यह मानता है कि होस्टनाम बदलने की संभावना नहीं है, इसलिए 1 घंटे (3600 सेकंड) की समय सीमा और वैधता; बैकटिक को कॉल करने के आसपास वाले बिट्स ही लाइन की शुरुआत में और होस्टनाम के बाद की तारीख डालते हैं।

आप इस प्रणाली का उपयोग बैटरी चार्ज स्तर, सिस्टम लोड या तापमान के मूल्य के आधार पर स्क्रिप्ट के आउटपुट को रंगने के लिए कर सकते हैं, यह मानते हुए कि आपके पास शेल स्क्रिप्ट से प्रासंगिक मूल्यों तक पहुंच है।


screenभागने के उल्लेख के लिए +1 \005- इस तरह पूरे सशर्त स्वरूपण को पहले से ही हार्ड-टू-पार्स captionसम्मान के बजाय बहुत अधिक पठनीय शेल स्क्रिप्ट में डाला जा सकता है । hardstatusस्क्रीन के निर्देश।
ckujau

1

यदि आप बहुत सारी स्क्रिप्टिंग से बचना चाहते हैं, तो आप यह कोशिश कर सकते हैं:

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

अगर यह "ठेस" से मेल खाता है, तो grep केवल होस्टनाम प्रिंट करेगा, इसलिए आप इसे एक बैकटिक और %?कंस्ट्रक्शन में प्लग कर सकते हैं । आहा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.