आउटपुट के नीचे बैश प्रॉम्प्ट - बैकग्राउंड लॉग टेल


15

मैं एक ऐसी कंपनी के लिए काम करता था जिसके पास अपने एक उत्पाद के प्रबंधन के लिए एक अनुकूलित शेल था जो लिनक्स पर चल रहा था और मैं इस शेल की एक प्रमुख विशेषता को दोहराने के लिए देख रहा हूं।

सभी काम एक पृष्ठभूमि प्रक्रिया और सभी जुड़े उपयोगकर्ताओं को प्रदर्शित लॉग से आउटपुट द्वारा किया गया था।

लॉग आपके शेल में बैकग्राउंड में पूंछ करेगा, और प्रॉम्प्ट लाइन हमेशा सबसे नीचे रहेगी।

उदाहरण के लिए

Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #

जिस तरह से मैंने बैश के साथ ऐसा करने की कोशिश की थी, वह यूजर्स .bashrc फाइल में एक अलग की गई पूंछ को शुरू करने के लिए थी, लेकिन जब कमांड से आउटपुट को stdout में भेजा जाता है - यह बैश प्रॉम्प्ट के अंतर्गत आता है, जैसे।

![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3

और उपयोगकर्ता को एंटर या CtrlCक्लीन प्रॉम्प्ट लाइन के लिए प्रेस करना होगा ।

मैं इस विचार से बाहर हूं कि कैसे प्रॉम्प्ट को हमेशा आउटपुट के निचले हिस्से में कूदना है और मुझे लगता है कि मैं Google पर कुछ भी खोजने के लिए गलत शब्दावली का उपयोग कर रहा हूं क्योंकि मुझे कोई भाग्य नहीं है - क्या कोई जानता है कि यह कैसे करना है बैश के साथ?


1
आप आउटपुट अपडेट तुरंत चाहते हैं या जब आपको नया प्रॉम्प्ट मिलता है?
आहिल्स 10

तुरंत, इसलिए यह केवल "पूंछ-एफ" को चलाने के लिए समान है, लेकिन तल पर संकेत के साथ।
इमाकारपेट 16

tail -fआउटपुट और प्रॉम्प्ट और कमांड आउटपुट का क्या होता है जब आप एक कमांड दर्ज करते हैं जिसमें महत्वपूर्ण मात्रा में आउटपुट होता है, खासकर जब आपकी पृष्ठभूमि प्रक्रिया सक्रिय रूप से अपना आउटपुट भेज रही हो?
अगली सूचना तक रोक दिया गया।

उनके मामले में, कमांड जो केवल पृष्ठभूमि प्रक्रिया के माध्यम से आउटपुट का कारण होगा, अपने दम पर नहीं, इसलिए यह एक मुद्दा नहीं था। इस मामले में, एक बार जब हमें कोई ऐसा समाधान मिल जाता है, जो वांछित प्रभाव देता है, तो मुझे लगता है कि यह खेलने और देखने का मामला होगा कि मिला-जुला कार्यान्वयन के आधार पर उत्पादन कितना खराब होगा।
Iamacarpet 10

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

जवाबों:


1

Tmux या स्क्रीन या अन्य प्रोग्राम का उपयोग किए बिना, आपको निम्नलिखित की आवश्यकता है। प्रॉम्प्ट को सबसे नीचे रखता है। जो भी फ़ाइल आपको चाहिए उसके साथ "/ var / log / cron" बदलें:

#!/bin/bash 
L=$(tput lines)
L1=${L}
(( L1-- ))
C=$(tput cols)
tput cup ${L} 0
tail -f /var/log/cron | while read line; do 
  tput sc
  printf "\e[1;${L1}r\e[${L1};${C}f" 
  echo; echo ${line}
  printf "\e[1;${L}r" && tput rc
done

इस कुंजी के टर्मिनल के लिए ANSI नियंत्रण वर्ण हैं। विशेष रूप से "\ e [x; y" कथन जो एक नया स्क्रॉल करने योग्य क्षेत्र सेट करता है। इसलिए, जैसा कि लॉग फ़ाइल की प्रत्येक पंक्ति पढ़ी जाती है, विंडो में नीचे की रेखा को स्क्रॉल करने योग्य क्षेत्र से बाहर रखा जाता है, लॉग फ़ाइल से लाइन डाली जाती है, फिर नीचे को वापस जोड़ा जाता है।


धन्यवाद माइकल, जो खूबसूरती से काम करता है =] - मुझे इसकी समसामयिक समस्या है कि आप इसे टाइप कर रहे हैं, जबकि लॉग लाइन स्क्रॉलिंग का एक बहुत कुछ है, आप अपने कंसोल लाइन पर पाठ के सभी का बैकस्पेस नहीं कर सकते हैं (मैं परीक्षण कर रहा था एक व्यस्त अपाचे लॉग), लेकिन मैं इसके लिए क्या उपयोग करना चाहता हूं, इसके लिए समस्या नहीं होनी चाहिए।
इमाकारपेट

@iamacarpet बहुत बढ़िया। खुशी है कि यह आपके लिए काम करता है।
माइकल मार्टिनेज

11

उत्तर स्क्रीन है या tmux का उपयोग किया गया है

मैं बताऊंगा कि आप स्क्रीन का उपयोग करके कैसे कॉन्फ़िगर कर सकते हैं

1) apt-get install screenउबंटू / डेबियन या yum install screenरेडहैट व्युत्पन्न पर या तो स्क्रीन का उपयोग करें ।

2) screen -S shell_and_logs

3) फिर Ctrl+ a, उसके बाद S(राजधानी एस) दबाएँ ।
एक क्षैतिज स्क्रीन दिखाई देगी

4) प्रेस Ctrl+ aइसके बाद TAB
यह दूसरी स्प्लिट विंडो में कूद जाएगा।

5) यहां एक और विंडो बनाएं, ताकि आप कुंजी दबाकर कमांड प्रॉम्प्ट प्राप्त करें Ctrl+ aफिर कुंजी जारी करेंc

6) आप दूसरी विंडो को दबाकर Ctrl+ aफिर टाइपिंग :resizeकर सकते हैं जिसके बाद Lines:दिखाई देगा। आपके द्वारा दर्शाई गई पंक्तियों की संख्या दर्ज करें।

7) अंत में आप Ctrl+ के aबाद विंडोज़ के बीच स्विच कर सकते हैं TAB

नीचे उदाहरण देखें


धन्यवाद val0x00ff - मुझे यह विचार पसंद है, यह काम पूरा कर देता है - लेकिन यह उतना साफ नहीं दिखता जितना अनुभव प्रदान की गई प्रणाली में है। एक अनुभवहीन उपयोगकर्ता के लिए, यह उतना पारदर्शी नहीं है - यह स्पष्ट रूप से एक और शेल है, बजाय महसूस करने के कि आपका मुख्य शेल आपको अपडेट कर रहा है।
इमाकारपेट 16

@iamacarpet tail -F /var/log/messages &आपको संदेश दिखाने का एक और तरीका है जब एक लॉगिन विफलता की खोज की जाती है या जब कुछ सेवा में कोई समस्या होती है, तो उदाहरण के लिए कुछ बदलता है। हालांकि यह आदर्श नहीं है क्योंकि यह आपके इंटरेक्टिव शेल को गड़बड़ कर देगा।
वैलेंटाइन बजरमी

हाँ, ठीक यही मैं पूछ रहा था - इंटरेक्टिव शेल को गड़बड़ किए बिना ऐसा करने का एक तरीका - जैसा कि वे कंपनियों के शेल पर करने में कामयाब रहे - लेकिन स्क्रैच से शेल लिखना अच्छा नहीं होगा इसे पूरा करने के लिए।
इमाकारपेट 16

1
@iamacarpet इसके अलावा अन्य साधनों का एक समूह है screenऔर tmuxऐसा कर सकते हैं - उदाहरण के लिए BSDs के कुछ जहाज एक windowकमांड के साथ । इस विकल्प को देखते हुए कि मैं इस समाधान को कस्टम शेल या इसके लचीलेपन के कारण उपलब्ध अन्य विकल्पों के ऊपर सुझाऊंगा। यह अंत उपयोगकर्ता के लिए उतना पारदर्शी नहीं हो सकता है, लेकिन वे वास्तव में अंतर नहीं जानते हैं, और बिजली उपयोगकर्ता / sysadmins द्वारा दिए गए अतिरिक्त लचीलेपन का उपयोग करने में सक्षम होंगे screen
voretaq7

@iamacarpet t=$(mktemp); printf '%s\n' 'screen tail -F /var/log/messages' split focus screen > "$t"; screen -S screenname -c "$t"इसे स्क्रिप्ट में रखें और इसे हर बार जब चाहें तब चलाएं। #Bash @ irc.freenode.org पर इसके लिए जिरह के लिए धन्यवाद
वैलेंटाइन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.