मैं एक शेल स्क्रिप्ट लिखना चाहता हूं जो मानक इनपुट से डेटा स्वीकार करता है, इसे फ़ाइल में लिखें और उसके बाद कुछ करता है।मानक इनपुट से डेटा पढ़ने के लिए बिल्ली का उपयोग कर रहा है और इसे फ़ाइल में लिखना बिल्ली का बेकार उपयोग नहीं है?
इस सवाल के प्रयोजन के लिए है, तो यह से एक स्ट्रिंग "foo"
grep और out.txt
के उत्पादन लिखते हैं कि मेरी स्क्रिप्ट मानक इनपुट को स्वीकार करना चाहिए हमें मान लें, यह in.txt
को लिखने,।
मैंने इस स्क्रिप्ट को लिखा था।
cat > in.txt
grep foo in.txt > out.txt
के रूप में समझाया में नीचे जवाब में से कुछ, एक बस
tee in.txt | grep foo > out.txt
इस्तेमाल कर सकते हैं क्या होगा अगर यह grep
के बजाय कुछ अन्य आदेश है कि मानक इनपुट से नहीं पढ़ता है? क्या यह तब बिल्ली का वैध उपयोग बन जाता है?
chmod
के साथ ऐसा एक उदाहरण है।
cat > in.txt
chmod -v 600 in.txt > out.txt
यह एक आवश्यकता है कि स्क्रिप्ट समाप्त होने के बाद दोनों इनपुट और आउटपुट फाइलों में उपलब्ध हो।
मैं जानना चाहता हूं कि मेरा कोड cat
का बेकार उपयोग कर रहा है या यदि यह cat
इस तरह से लागू किया जा सकता है तो यह एक पूरी तरह से मान्य परिदृश्य है?
इसके अलावा, cat
का उपयोग किए बिना इस कोड को फिर से लिखने का कोई तरीका है, जिससे कि यह किसी भी कमांड का बेकार उपयोग नहीं करता है?
नोट: मुझे ऐसे उत्तरों से चिंतित है जो किसी भी POSIX अनुपालन खोल पर लागू होते हैं, न केवल बैश या लिनक्स पर।
अपने उदाहरण में, क्यों नहीं 'grep foo out.txt && nextcmd out.txt'? (एक * कंपाउंड कमांड * का उपयोग करना) (** नोट: ** प्रारंभिक पुनर्निर्देशन वैकल्पिक है) –
@ डेविडसी। रैंकिन मैं यह देखने में असफल रहा कि आपकी टिप्पणी कैसे प्रासंगिक है। मैं पहले से ही 'grep foo in.txt> out.txt' कर रहा हूं, जहां' in.txt' में मानक इनपुट से पढ़ा गया पाठ शामिल है। के लिए 'nextcmd out.txt' क्या है? –
बहुत कम आदेश stdin से नहीं पढ़ेगा। कभी-कभी आपको इंगित करने के लिए '-' निर्दिष्ट करना होगा कि इनपुट stdin में है। बहुत ही मौलिक रूप से आपको इसे स्पेल करने की आवश्यकता होती है: 'dev/stdin' – rici