UNIX में पाइपिंग में निष्पादित कमांड


4

जब मैं एक कमांड लिखता हूं

$ echo date  

तब यह "तारीख" को प्रिंट करता है क्योंकि यह है कि यह तारीख कार्यक्रम नहीं चलाता है।
लेकिन जब मैं लिखता हूं

$ echo date | wc  

फिर सही उत्तर का उत्पादन किया जाता है जैसे कि तिथि को चलाया गया। कैसे पाइपिंग यहाँ अंतर बना रही है?
कृपया समझाएँ।


1
उल्लेख नहीं करने के लिए, मैं इस वैसे भी repro प्रतीत नहीं कर सकता ... echo date | wc एक ubuntu प्रणाली पर मुझे 1-1-5 देता है, जो उसी के समान है wc और फिर टाइप करना date^D

फिर से जाँच करें, इसकी नहीं :)
Tim Post

1
गूंज `date` | wc उन परिणामों का उत्पादन करेगा जिनकी आप बात कर रहे हैं। या बेहतर, तारीख | स्वागत। echo इसके बाद जो भी प्रिंट आता है, जब तक $ () या `` उस शेल को नहीं बताता जो आप किसी अन्य प्रक्रिया का आउटपुट चाहते हैं।
Tim Post

जवाबों:


3
$ echo date | wc
      1       1       5

बाइट्स काउंटर के रूप में == 5 (= आकार ("तिथि")) ऐसा लगता है कि तारीख नहीं चलाई गई थी

परंतु

$ echo date | xargs time

आदेश के रूप में दिनांक चलाता है


ठीक है..डेट नहीं चल रहा था, इसके बजाय यह नहीं देता है। दिनांक के वर्ण। लेकिन फिर भी, इसे 1 1 4 दिखाना चाहिए, क्योंकि तिथि में 4 वर्ण हैं। यह 5 क्यों दिखा रहा है?
Happy Mittal

क्योंकि स्ट्रिंग "तिथि" के बाद एक पंक्ति फ़ीड वर्ण है
Aaron Digulla

लेकिन आज के बाद कोई लाइनफीड चरित्र नहीं है। यह बस तारीख है | wc इसलिए केवल 'डी', 'ए', 'टी' और 'ई' को ही पास किया जाता है।
Happy Mittal

2
echo आपके लिए एक पंक्ति फ़ीड जोड़ देगा। उपयोग -n लाइन फ़ीड से बचने के लिए।

2

यह नहीं है

प्रयत्न:

echo date | cat > here.out

फिर कोशिश करो:

echo `date` | cat > here.out

3
"कैट अवार्ड के बेकार उपयोग" के लिए बधाई :-) partmaps.org/era/unix/award.html
Aaron Digulla

:)) एह, लगता है कि मुझे अपने जवाब चमकाने होंगे।

2
@ आरोन दिगुल्ला - वे था ओपी ने जो वर्णन किया है, उसके समान एक पाइप का उपयोग करते हुए इसे प्रदर्शित करने की कोशिश करना तो इस मामले में, यह बेकार नहीं है cat, क्योंकि यह एक समझदार प्रदर्शन करता है, प्रश्न को देखते हुए। +1।
Tim Post

0

समस्या यह है कि 'इको' मानक आउटपुट के लिए निम्न पाठ भेजता है। इस मामले में, पाठ 'तारीख' है, इसलिए आप जो दिखाते हैं वह काम नहीं करेगा। यह होगा: प्रतिध्वनि | तिथि क्योंकि तिथि अब प्रतिध्वनि के लिए पाठ का निर्माण करती है।



0

यह कैसे bash तार का उपयोग करता है के साथ करना है।

यदि आप देखते हैं कि उन चर में क्या जमा होता है

d1=date
d2="date"
d3='date'
d4=`date`

आप ध्यान देंगे कि d1, d2 और d3 केवल तार हैं जिसमें "तिथि" शामिल है, हालाँकि d4 में निष्पादित कमांड तिथि का परिणाम है।

यदि हम इसे आगे बढ़ाते हैं और देखते हैं कि क्या हम उन तारों के बीच कोई अंतर पा सकते हैं।

d4=`date +%Y%m%d`
echo $d4

इसका अर्थ यह होगा कि अब हमारे पास $ d4 में "20100418" संग्रहीत है।

d3='$d4'
echo $d3

अब $ d3 में हमने स्ट्रिंग "$ d4" छापी है, जो सटीक 3 अक्षर हैं ...

d2="$d4"
echo $d2

अब यहाँ हमारे पास $ d2 में "20100418" संग्रहीत है क्योंकि हमने $ d4 मुद्रित किया और उस आउटपुट को चर $ d2 में सहेजा।

d1=$d4
echo $d1

और फिर आपके पास चर $ d4 की सामग्री चर $ d1 में है।

आशा है कि यह थोड़ा स्पष्ट करता है कि वे कैसे काम करते हैं।

और अब वापस अपने सवाल पर।

cj@zap:~$ echo date | wc
      1       1       5
cj@zap:~$ echo `date` | wc
      1       6      31
cj@zap:~$ date | wc
      1       6      31

अब इसका वास्तव में क्या मतलब है? आदमी wc हमें यह देता है:

नाम          wc - प्रत्येक फाइल के लिए न्यूलाइन, वर्ड और बाइट काउंट प्रिंट करें

तो "1 1 5" ने हमें बताया कि हमारे पास 1 नई पंक्ति, 1 शब्द और 5 अक्षर हैं और वह दिनांक \ n से मेल खाता है।

और "1 6 31" "sön 18 apr 2010 10.07.25 CEST \ n" से मेल खाएगा, क्योंकि यही मेरी तारीख कमांड ने मुझे दिया था ...

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