टर्मिनल में लाइन रैप को कैसे निष्क्रिय करें?


55

मुझे बैश शेल का उपयोग करके बड़ी लॉग फ़ाइलों को देखने की आवश्यकता है। मैं lessफ़ाइलों को खोलने के लिए उपयोग कर रहा था , लेकिन चूंकि लाइनें बहुत लंबी हैं इसलिए किसी तरह की लाइन / शब्द रैपिंग चल रही है।

चूंकि फाइलें Log4J लॉग हैं, और प्रत्येक लाइन की शुरुआत में एक पैटर्न है, लिपटे हुए लाइनों का आउटपुट का विश्लेषण करना मुश्किल है, इसलिए मैंने less -Sलंबी लाइनों का उपयोग करना शुरू कर दिया ।

लेकिन अब मुझे उपयोग करने की आवश्यकता है tail -f, और यह आउटपुट को भी लपेटता है। क्या सभी कमांड के लिए बैश शेल में लाइन रैप को अक्षम करना संभव है?

नोट: एक अलग प्रश्न का उत्तर है जिसमें भागने के क्रम का उल्लेख है echo -ne '\e[?7l', लेकिन यह काम पर नहीं लगता है।


4
ध्यान दें कि यह शेल (बैश) की आपकी पसंद से असंबंधित है, लेकिन यह आपकी पसंद के टर्मिनल (xterm, टर्मिनल, सूक्ति-टर्मिनल, konsole,…) पर निर्भर कर सकता है। देखें कि 'टर्मिनल', 'शेल', 'ट्टी' और 'कंसोल' में क्या अंतर है?
गिलेस एसओ- बुराई को रोकना '

4
जैसा कि गिल्स ने उल्लेख किया है, यह टर्मिनल एमुलेटर का मामला है। उदाहरण के लिए, में screen, "रैप" कमांड है। में xterm, -awस्वचालित लाइन रैप्स को रोकने के लिए एक विकल्प है। संभवतः अन्य टर्मिनल एमुलेटर के लिए कुछ एक्स संसाधन हैं। आप किस एमुलेटर का उपयोग कर रहे हैं?
अर्सज

मैं उपयोग कर रहा हूं gnome-terminal
nunaxe

1
@ विवरण: वास्तव में, यह :) के +awलिए है xterm, लेकिन, यह आउटपुट के लिए समस्या को हल करता है (उदाहरण के लिए, टीपीबी से ls -lलंबे विंडोज-ईश नामों पर एक गुच्छा के साथ, यह ठीक काम करता है), इनपुट के लिए , एक कमांड दर्ज करते समय, आप शायद अभी भी रैप (या, कम से कम आप इसे अभी जिस तरह से चाहते हैं, उस पर नहीं चाहते हैं +aw: "कॉलम बॉर्डर" से परे लिखने की कोशिश करें और फिर एक विशाल GFX बग के लिए पीछे जाएं)।
इमानुएल बर्ग

वैसे, यह न तो लगता है और न urxvtही rxvtलाइन रैप को अक्षम कर सकता है।
इमानुएल बर्ग

जवाबों:


7

क्या आपको वास्तव में ज़रूरत है tail -fया ऐसा कुछ less +Fकरना होगा? चूंकि यह लगता है कि आप अभी भी एक इंटरैक्टिव पेजर चाहते हैं, इसलिए मुझे लगता है कि lessकिसी एक को फिर से लागू करने की तुलना में इसके साथ रहना बहुत आसान होगा ।

एक अंतिम नोट: क्या आपने विचार किया है tail -f file | less?


मैंने कुछ अनुभवों के साथ screenऔर xtermजैसा कि उन एमुलेटर के पास लाइन रैप्स को रोकने के लिए विकल्प हैं। लेकिन लाइन को रौंदने और लाइन की पूंछ को छिपाने के बीच एक बड़ा अंतर है ताकि हम चाहें तो इसे देख सकें। का उपयोग करना tail -f file | less -Sसही नहीं है क्योंकि यह अक्षम लगता है -fलेकिन यह सबसे अच्छा समाधान है जो मुझे मिला।
nunaxe

@ बोरिस मार्कोस का जवाब शायद बेहतर है। यह lessसीधे उपयोग करता है।
एंथनीडी 973

51

प्रयत्न, कोशिश:

less -S +F filename

  • Ctrlcटेलिंग को रोकने के लिए दबाएँ और अब आप कर्सर कुंजियों का उपयोग करके बाएँ और दाएँ ले जा सकते हैं।
  • Shiftfसिलाई फिर से शुरू करने के लिए दबाएँ
  • प्रेस Ctrlc, qछोड़ने के लिए

यह भी खूब रही! जब मेरा टर्मिनल दो स्क्रीनों में फैला हुआ है, लेकिन जब से मैंने कल इसे पढ़ा है, मैं इसे केवल विस्तृत आउटपुट देता हूं less -S। लैपटॉप पर भी बहुत उपयोगी है।
जोनाथन öström


15

मान लें कि आपके पास COLUMNSचर परिभाषित है, तो आप निष्पादित कर सकते हैं

tail -f your-app.log | cut -c -$COLUMNS

अन्यथा $COLUMNSटर्मिनल की चौड़ाई के साथ विकल्प , जैसा कि प्राप्त किया गया है stty -a


2
एक अन्य विकल्प $COLUMNS( SIGWINCHकेवल तुरंत अगले अद्यतन पर ) और stty -a(स्क्रिप्ट में उपयोग करने के लिए कठिन ) पर अद्यतन नहीं किया गया है tput cols
मैनटवर्क

धन्यवाद enzotib यह काम करता है, लेकिन यह लाइन को प्रभावित करता है और हम लंबी लाइनों के अंत को देखने में असमर्थ हैं। क्या cutइस तरह का व्यवहार करना संभव है less -Sजहां लंबी लाइन बफ़र की जाती है और हम दिशात्मक कुंजी का उपयोग करके पूरी लाइन देख सकते हैं?
nunaxe

उह, इतना आसान नहीं है। मैं वायर्ड सॉल्यूशंस के बारे में सोच रहा हूं जैसे कि दो अलग-अलग screenविंडो एक tail -f | cutया एक स्क्रिप्ट के साथ lessव्यवहार में किसी तरह का अनुकरण । लेकिन फिलहाल समाधान नहीं है।
enzotib

1
साइड-नोट: कट केवल गिफ्ट बाइट्स; इसके विपरीत less -S, यह रंगीन पाठ, या एएनएसआई के साथ कुछ भी बच निकलने वाला है। यूनिकोड पर भी शिकंजा कसा जा सकता है।
ELLIOTTCABLE

हां, less -Sरंगीन पाठ के साथ अधिक उपयोगी है। आप less -S -E$ COLUMNS पर रंगीन आउटपुट काटने के लिए तुरंत - बाहर निकलने के लिए उपयोग कर सकते हैं ।
blueyed

4

आप के लिए पंक्ति लपेटना निष्क्रिय कर सकते हैं less, tailऔर साथ लिनक्स खेले जाने वाले हर अन्य आदेश:

tput rmam

लाइन रैपिंग उपयोग को बहाल करने के लिए:

tput smam

3

टर्मिनेटर (http://software.jessies.org/terminator/) टर्मिनल एमुलेटर लंबी लाइनों को लपेटने की अनुमति नहीं देता है और इसमें क्षैतिज स्क्रॉलिंग है (लेकिन जावा में लिखा गया है)।


मैं इसे कैसे सक्षम करूं? यह डिफ़ॉल्ट रूप से काम नहीं करता है।
डिफॉल्ट

इस लेखन के रूप में, क्षैतिज स्क्रॉल डिफ़ॉल्ट रूप से चालू है। महान, क्रॉस-प्लेटफॉर्म की सिफारिश। धन्यवाद!
user7089

कृपया इस उत्तर को यह दिखा कर बेहतर बनाएं कि कोई इस सुविधा को कैसे सक्षम करेगा। मैंने वरीयताएँ खोज ली हैं और इस विकल्प का पता नहीं लगा सकता। एफडब्ल्यूआईडब्ल्यू, मैं चल रहा हूं terminator v1.91
एंथनीके

2
@AnthonyK नाम को साझा करने वाले दो असंबंधित टर्मिनल एमुलेटर हैं terminator, यह एक जिसे gentledevil संदर्भित कर रहा है और एक जिसे आप उपयोग कर रहे हैं।
जूलियाग्रे

3

दो अच्छे उत्तर / उदाहरण यहाँ

http://www.commandlinefu.com/commands/view/1710/tail-a-log-file-with-long-lines-truncated

tail -f logfile.log | cut -b 1-80

tail -f logfile.log | cut -b -$(tput cols)

एक कैविएट: कम से कम मेरे मैक कट पर टर्मिनल में बनाया गया टैब वर्णों को बहुत अच्छी तरह से संभालता नहीं है। ऐसा लगता है कि यह उन्हें 8 स्थानों के साथ प्रदर्शित करता है, लेकिन सिर्फ उन्हें 4 अंतरिक्ष चौड़ा या ऐसा कुछ के रूप में गणना करता है। दूसरे शब्दों में, यदि आपका टर्मिनल 80 वर्णों का चौड़ा है और आपके आउटपुट में प्रति पंक्ति कई टैब हैं, तो आपको चौड़ाई 60 या कुछ इस तरह सेट करनी होगी। YMMV।


2

नीचे दिए गए विकल्पों के साथ प्रयोग करें less। यह निर्दिष्ट होने पर शब्द रैप को अक्षम कर देगा और टेक्स्ट रंगों को संरक्षित करेगा।

less -SR +F filename


2

इस पेज पर कुछ उदाहरण दिए गए हैं -f के साथ पूँछ की पूंछ ... मेरे परीक्षणों से यह ठीक से काम नहीं करता है, अगर आपको वास्तव में ज़रूरत है (जैसे। यदि आपको कुछ और पाइप करने की आवश्यकता है, जैसे कि grep) तो आप कुछ का उपयोग कर सकते हैं। :

watch -n 1 'tail -n $(($LINES-3)) file.log | cut -c -$COLUMNS'

प्रदर्शन के लिए सबसे अच्छा शायद नहीं है, लेकिन काम करता है ... और अगर कोई अतिरिक्त पिपिंग की आवश्यकता नहीं है तो आप कुछ अलग उपयोग कर सकते हैं जैसे:

less -S +F file.log

2

बहुत सारी टिप्पणियाँ हैं जो प्रश्न से भटका करती हैं। ओपी का सवाल था

लेकिन अब मुझे उपयोग करने की आवश्यकता है tail -f, और यह आउटपुट को भी लपेटता है। क्या सभी कमांड के लिए बैश शेल में लाइन रैप को अक्षम करना संभव है?

ऑटोरैप फीचर के बारे में कुछ टिप्पणियां की गईं, जिसमें कहा गया कि सभी टर्मिनलों में यह नहीं है। शायद। लेकिन ( टर्मिनेटर से अलग , जिनके डेवलपर्स कोई टर्मिनल विवरण नहीं देते हैं ) दिए गए सभी उदाहरण xterm, rxvt और कुछ लुक-अलाइक या अवरोही थे। वे सभी संबंधित हैं।

+awमें विकल्प xtermसे मेल खाती autoWrapसंसाधन। मैनुअल से परामर्श करना, यह कहता है कि

   autoWrap (class AutoWrap)
           Specifies  whether  or  not  auto-wraparound should be enabled.
           This is the same as the VT102 DECAWM.  The default is "true".

और एक्सटर्म कंट्रोल सीक्वेंस में यह कहा गया है

CSI ? Pm h
          ...
          DEC Private Mode Set (DECSET).
            Ps = 7  -> Wraparound Mode (DECAWM).

जो निश्चित रूप से "टर्मिनल की अपनी पसंद पर निर्भर नहीं करता है", क्योंकि VT100-संगतता के साथ कोई भी टर्मिनल सुविधा का समर्थन करता है। उदाहरण के लिए xterm और rxvt ऐसा करते हैं। दूसरे भी करते हैं।

क्या यह सुविधा ओपी के लिए उपयोगी होगी यह बहस का मुद्दा है। लाइन-रैपिंग को दबाना समस्या का केवल एक पहलू है:

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

ऐसे पेसर्स हैं जो जरूरत के मुताबिक काम कर सकते हैं, जैसे, मल्टीटैल जो इसकी विशेषताओं को सूचीबद्ध करता है

लाइन रैपिंग को बंद किया जा सकता है, इसके बाद कर्सर कुंजी के साथ बाईं / दाईं ओर स्क्रॉल कर सकते हैं

Ncurses- आधारित होने के नाते, इसे किसी भी उद्धृत टर्मिनलों पर काम करना चाहिए।


1

vi

vi प्रकार के अंदर

:set nowrap

मुझे लगता है कि vi के लिए एक प्लगइन भी है जो आपको व्यवहार की तरह पूंछ देगा।


-1

यदि आप वास्तव में पूर्ण लाइनों को देखना चाहते हैं तो आप टेक्स्ट को एटम या नोटपैड ++ जैसे टेक्स्ट एडिटर में कॉपी और पेस्ट कर सकते हैं और वहां लाइन रैप्स अक्षम कर सकते हैं।

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