क्या `आदमी ls> temp.txt`। आउटपुट टेक्स्टफाइल दूषित है


27

जब मैं man ls > temp.txtआउटपुट पाठ फ़ाइल निष्पादित करता हूं तो वह दूषित हो जाती है। भ्रष्ट होने से मेरा मतलब है कि कुछ शब्दों में पहले और आखिरी अक्षर को बार-बार दोहराया जाता है।

कई पहली पंक्तियाँ temp.txt:

LS(1)                     BSD General Commands Manual                    LS(1)

NNAAMMEE
     llss -- list directory contents

SSYYNNOOPPSSIISS
     llss [--AABBCCFFGGHHLLOOPPRRSSTTUUWW@@aabbccddeeffgghhiikkllmmnnooppqqrrssttuuwwxx11] [_f_i_l_e _._._.]

DDEESSCCRRIIPPTTIIOONN

और इसी तरह। पुनर्निर्देशन के बिना man lsपूरी तरह से सामान्य है। क्या हो रहा है?


दिलचस्प है, फ़ाइल का उपयोग करके lessया moreस्वरूपण को सही तरीके से प्रदर्शित करना। यदि आप उपयोग करते हैं vim, तो यह ^Hअतिरिक्त अक्षरों के साथ कच्चे बैकस्पेस ( ) दिखाएगा ।
केल्विन

2
आपकी फाइलें हिचकी से पीड़ित हैं।
शुतुलु

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

जवाबों:


30

से man man:

बैकस्पेस और अंडरस्कोर के बिना, एक आदमी पृष्ठ का एक सादा पाठ संस्करण प्राप्त करने के लिए प्रयास करें

    # man foo | col -b > foo.mantxt

manमैन पेज, अंडरस्कोर और डबल लेटर्स के प्रिंटेड वर्जन को पार्स किया जाता है

यह इतना नहीं है कि वे 'पार्स' हैं, बल्कि "यदि आपके पास टर्मिनल नहीं है, तो बोल्ड प्रारूप को दोहराए गए चरित्र के रूप में प्रदर्शित किया जाना है"। एक बार जब आप इसे एक टर्मिनल (vt100, xterm, टर्मिनल, आदि ...) पर हुक करते हैं, तो आदमी टर्मिनल को पहचानता है और रंग, बोल्ड, रेखांकित और पसंद करने के लिए उपयुक्त नियंत्रण कोड भेजता है। इसे सही ढंग से पार्स किया जा रहा है - बस एक शून्य टर्मिनल प्रकार के लिए।

माइकलटी द्वारा टिप्पणी


21

एक बार, कंप्यूटरों को नियमित रूप से टेलेटिप्स (टेलीप्रिंटर्स) तक झुका दिया गया था जो वास्तविक समय में प्राप्त होने पर सभी पाठ को कागज पर प्रिंट करेगा। हालांकि टेलीप्रिंटर्स में रेखांकित या बोल्ड-फेस वाले टेक्स्ट के लिए कोई सुविधा नहीं थी, लेकिन एक अंडरलाइनिंग, बैकस्पेसिंग, और कुछ और प्रिंट करना इस कारण होगा कि कुछ और रेखांकित हो। इसी तरह एक चरित्र का उत्पादन, बैकस्पेसिंग, और एक ही चरित्र को आउटपुट करने से चरित्र गहरा दिखाई देगा, हालाँकि इसकी प्रभावशीलता स्थापित रिबन की गुणवत्ता के आधार पर अलग-अलग होगी (यदि रिबन पुराना और कमजोर था, एक ही चरित्र को दो बार टाइप करना यह काफी गहरा बना देगा, एक नए रिबन के साथ चरित्र को टाइप करने पर भी एक बार अधिकतम कालापन प्राप्त होगा)। इसके अलावा, भले ही उपयोगकर्ता प्रिंटर से जुड़ा नहीं था,manएक प्रिंट स्पूलर काफी सामान्य होता, जो शायद समझाता है कि manआउटपुट पुनर्निर्देशित होने पर भी ऐसा क्यों व्यवहार करेगा।

बीटीडब्ल्यू, कुछ प्रिंटर (और यहां तक ​​कि टेलीप्रिंटर्स) पर, का प्रदर्शन पहले की _←U_←N_←D_←E_←R_←L_←I_←N_←I_←N_←Gतुलना में काफी खराब होगा ___________←←←←←←←←←←←UNDERLINING, क्योंकि पूर्व में बार-बार रिवर्स दिशा को प्रिंट करने की आवश्यकता होती है (और आमतौर पर दोनों सिरों पर अपने लक्ष्य को ओवरशूट करते हैं)। मल्टी-स्ट्राइक बोल्डफेस का उपयोग करते समय भी यही सच होगा, लेकिन वहाँ व्यवहार वास्तव में फायदेमंद हो सकता है क्योंकि पहली बार प्रत्येक वर्ण मुद्रित होने पर तुरंत एक बैकस्पेस चरित्र का पालन होगा और दूसरा नहीं होगा। यदि पहले वर्ण को प्रिंट करते समय प्रिंट सिर में तेजी आ रही थी, तो इससे दूसरे के सापेक्ष थोड़ा दुखी हो जाएगा, जिससे बोल्ड-फेस प्रभाव अधिक प्रभावी हो जाएगा।


जितना अधिक मैं यूनिक्स के बारे में सीखता हूं, उतना ही मुझे पता चलता है कि यह विंडोज़ की तरह ही बैकवर्ड संगतता के साथ कैसे जुड़ा हुआ है।
सियुआन रेन

इतिहास का सबक! यह देखने के लिए महान है कि कुछ तरीकों को दूसरों पर क्यों पसंद किया जा सकता है।
डस्टिन व्हीलर

15

माट्यूज़ का उत्तर सही है, लेकिन यह इंगित करने योग्य है कि एक ट्टी के लिए फ़ॉर्मेटिंग को अलग करने के बजाय, आप अलग से मैन फॉर्मेट कर सकते हैं।

उदाहरण के लिए, आप इसके बजाय एक अच्छी तरह से स्वरूपित पीडीएफ प्राप्त कर सकते हैं:

man -t ls | pstopdf -i -o ~/ls.pdf

मैं वर्षों से OnyX का उपयोग कर रहा हूं, मुख्य रूप से मेरे मैन पेज प्रिंट करने के लिए यह करता है। अब और नहीं! मैं इसे एक स्क्रिप्ट में लिखूंगा जो मेरे सिस्टम के सभी मैन पेजों को करेगा। इसके लिए बहुत बहुत धन्यवाद क्योंकि मैंने बहुत पहले ही देख लिया था कि मैं गोमेद का उपयोग क्यों कर रहा हूं। मैं टर्मिनल से इस तरह की चीजें करना पसंद करता हूं और अब कर सकता हूं।
user3439894

अच्छी सुविधा है। क्या इसके अलावा html को आउटपुट करने का एक सरल तरीका है? gzip -dc $(man -w ls) | groff -Thtml -mandoc -c > /tmp/man-ls.html
केल्विन

आदमी के लिए मेनपेज कहता है कि / usr / bin / man पर स्ट्रिंग्स को चलाने के -tसाथ groff -Tps ...और उसके साथ प्रारूप , जो हार्डकोड किया गया प्रतीत होता है। और जब -Tpsसे GROFF_TYPESETTER को ओवरराइड किया जाता है, आपका समाधान सबसे व्यवहार्य हो सकता है। यद्यपि आप अपनी पाइपलाइन में एक कदम याद कर रहे हैं। आप tbl चाहते हैं तो groff। man -d lsजो पाइपलाइन उपयोग करता है उसे देखने का प्रयास करें ।
टिम बी

6

एक विकल्प के रूप में, मेरे पास निम्नलिखित शेल फ़ंक्शन परिभाषित हैं ( ओह-माय-जेडएस के ओएस एक्स प्लगइन से कहा जाता है ):

man-preview () {
    man -t "$@" | open -f -a /Applications/Preview.app
}

वांछित मैन पेज में यह परिणाम सभी सुंदर स्वरूपण के साथ पूर्वावलोकन में खोला जा सकता है जो कोई भी इच्छा कर सकता है। इस एकल उपनाम को आपके लिए जोड़ना काफी आसान है ~/.profile(मुझे लगता pmanहै कि इससे आसान है man-preview, इसलिए मैंने अपने में सेट alias pman='man-previewकिया है ~/.zshrc)।

PS मैंने pmanइंटरनेट के चारों ओर विभिन्न डॉट फाइलों में परिभाषित फ़ंक्शन को देखा है , ओह-माय-जेडएस सिर्फ वही होता है जहां मेरा परिभाषित होता है।


2

या आप किसी भी मैन पेज को देखने और प्रिंट करने के लिए कार्ल लिंडबर्ग द्वारा मैनऑन का उपयोग कर सकते हैं। ManOpen को पहले NeXtStep के लिए विकसित किया गया था और अभी भी कार्ल के लिए धन्यवाद काम करता है।

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