2011-12-21 10 views
8

मुद्रण पहुंचाया विभिन्न उत्पादन देता है?क्यों ls जब सीधे टर्मिनल के लिए

+0

एफडब्ल्यूआईडब्ल्यू, मैं इस व्यवहार को तोड़ने पर विचार करता हूं। आदेशों की विशाल पाइपलाइनों को एकसाथ स्ट्रिंग करने में आसानी से सक्षम होने की समय-सम्मानित परंपरा बहुत कठिन होती है जब कहा जाता है कि आदेश अलग-अलग स्थानों पर भेजे जाने पर उनके आउटपुट को बदल देते हैं। – paxdiablo

उत्तर

6

ls वास्तव में यह निर्धारित कर सकता है कि यह टर्मिनल या फ़ाइल (isatty लाइब्रेरी कॉल के साथ) में आउटपुट कर रहा है या नहीं। यदि यह एक कंसोल का पता लगाता है, तो यह आसान देखने के लिए इसे और अधिक कॉम्पैक्ट बनाने का प्रयास करेगा।

+0

एक वेबपृष्ठ ढूंढें: http://www.ginac.de/~kreckel/fileno – kev

6

ls पाइप होने पर स्वचालित रूप से ls -1 जैसा व्यवहार करता है।

यह आमतौर पर आप क्या चाहते हैं जब आप awk या ऐसा ही कुछ करने के लिए ls पाइप कर रहे हैं, क्योंकि यह एक पंक्ति-दर-पंक्ति आधार पर ls के उत्पादन का इलाज नहीं है।

इस डिफ़ॉल्ट व्यवहार को ओवरराइड करने के लिए, आप ls -C | cat का उपयोग कर सकते हैं।

+0

इसके अलावा, यह पाइप होने पर रंगों का उपयोग नहीं करता है। तो यदि आप रंगीन भागने के कोड चाहते हैं, तो आप 'ls -C --color = yes | का उपयोग कर सकते हैं cat'। यह 'ls -C --color = yes | के साथ उपयोगी हो सकता है कम -R' –

1

ताकि प्रत्येक पंक्ति केवल एक प्रविष्टि हो, जिससे आउटपुट को काम करने के लिए पाइप किया जा सके, जिसकी अपेक्षा की जा सकती है।

$ ls | sort -r 
a.out avg.c avg.h 

लेकिन क्योंकि sort नहीं पता था कि प्रत्येक पंक्ति में एक से अधिक आइटम नहीं था, यह नहीं कर सकता है कुछ भी: उदाहरण के लिए (अपने ls उत्पादन को देखते हुए), निम्नलिखित शायद आप क्या चाहते हैं नहीं होगा। वास्तव में क्या होता है करने के लिए इस की तुलना करें:

$ ls | sort -r 
avg.h 
avg.c 
a.out 

आप ls को -C पास करके (अप्रत्याशित) पहली व्यवहार प्राप्त कर सकते हैं।

संबंधित मुद्दे