less
जाँचता है कि क्या stdout
यह एक टर्मिनल है, और cat
यह तब व्यवहार करता है जब यह नहीं होता है (प्रतियां ईओडी तक स्टडआउट नहीं करता है)।
यह सुविधा आपको स्क्रिप्ट या प्रोग्राम लिखने की सुविधा देती है जो हमेशा अपने आउटपुट (जैसे --help
आउटपुट) को भेजते हैं, less
जबकि एक फ़ाइल को आसान पुनर्निर्देशन की अनुमति देते हुए। यह चूसना होगा अगर some_command --fullhelp > help.txt
अभी भी पाठ के माध्यम से पृष्ठ पर स्पेस-बार के लिए इंतजार किया गया, या कुछ और। कुछ कमांड (जैसे man
) जाँच करते हैं कि उनका अपना आउटपुट यह तय करने के लिए है कि उनके आउटपुट को पेजर के माध्यम से भेजा जाए या नहीं। यदि आप दौड़ते हैं man ls > ls.txt
, तो यह कभी भी आपका आह्वान नहीं करता है $PAGER
।
less
यदि आप एक लाइनर से बाहर एक पाइप लाइन में अधिक चरणों को जोड़कर संपादित करना भूल जाते हैं, तो बिल्ली की तरह व्यवहार करना आसान है।
less
टर्मिनल आयामों का पता लगाने की जरूरत है (स्क्रीन का आकार, यह जानने के लिए कि एक बार में कितनी लाइनें दिखानी चाहिए)। ioctl(2)
उस पर का उपयोग करता है stdout
एक गैर टर्मिनल पर ENOTTY वापसी होगी, तो यह वैसे भी गैर टर्मिनल मामले से निपटने से बचने नहीं कर सकते। less
वास्तव isatty(3)
में टर्मिनल आयामों की जाँच करने से पहले उपयोग करता है , लेकिन isatty
केवल एक ioctl की कोशिश करके और त्रुटि की कमी के लिए जाँच करके काम करता है।
यहां तक कि एक साधारण पेजर जैसे more(1)
(कम से कम उपयोग-लिनेक्स संस्करण) में यह सुविधा है, क्योंकि यह शायद उस मामले के लिए लागू करने का सबसे सरल समझदार व्यवहार है।
ध्यान दें कि जब आप किसी चीज़ को पाइप करते हैंless
(उदाहरण के लिए grep foo bar.txt | less
), तो उसे /dev/tty
कीबोर्ड इनपुट के लिए खोलना होगा । (आप इसे ऐसा करने के साथ देख सकते हैं echo foo | strace less
)।
bash script.sh
,bash script.sh | cat
,bash script.sh > file
, और देखते हैं कि उत्पादन आप मिलता है।