क्या टी का उपयोग करने का कोई महत्व है?


47

ऐसा क्यों है कि लगभग सभी निर्देश जैसे सिस्टम फाइल में टेक्स्ट को जोड़ना fstabऔर /etc/apt/sources.list.d/<name>.listउपयोग करना tee और echo कहा टेक्स्ट को शामिल करना है ?

निम्नलिखित उदाहरणों को लें, जिन्हें रूट के रूप में चलाया जाता है :

## 1
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee -a file1
## 2
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' >> file2

रनिंग diff -u file1 file2रिटर्न कुछ नहीं; रनिंग से md5sum file1 file2पता चलता है कि उनके चेकसम समान हैं, जो मुझे मेरे मूल प्रश्न पर वापस लाते हैं:

क्यों है | tee <FILENAME>उबंटू डॉक्स भर में इतना प्रचलित है, यह सिर्फ अच्छा अभ्यास है, अन्यथा नहीं यह सिर्फ उपयोग उदाहरण 2 के बजाय से उत्पादन पारित करने के लिए आसान होगा echoकरने के लिए tee?


1
आप अपने आदेशों में सूडो को याद कर रहे हैं; कि 2 के बीच अलग परिणाम दिखाएगा;)
Rinzwind

1
@Rinzwind मैं इन कमांड्स को रूट के रूप में चला रहा हूं।
अलेक्सज मगुरा

जवाबों:


83

एक अंतर है: टी आउटपुट को डुप्लिकेट करता है: यह इसे फाइल और डिस्प्ले दोनों में भेजता है।

लेकिन वहाँ अधिक है:

  • उदाहरण के लिए, यदि आप एक साथ दो फाइलों में कुछ स्ट्रिंग लिखना चाहते हैं, तो आपके द्वारा उपयोग की जाने वाली टी के साथ कमांड है:

     echo "some text" | tee file1 > file2  
    
  • एक और बात टी मदद कर सकता है आप sudo का उपयोग करते समय एक समस्या से बचने के लिए है। सामान्य आउटपुट पुनर्निर्देशन ऑपरेटर को हमेशा आपके उपयोगकर्ता विशेषाधिकारों के साथ निष्पादित किया जाता है, जब आप कमांड के सामने एक sudo लिखते हैं जो STDOUT टेक्स्ट उत्पन्न करता है। दूसरे शब्दों में, यह विफल होगा यदि आपके पास उस फ़ाइल को लिखने की अनुमति नहीं है:

     sudo echo "something" > bar  
    

    लेकिन टी के साथ, सब कुछ ठीक हो जाएगा:

    echo "something" | sudo tee bar  
    

इस साइट से 2 उदाहरण । यह कुछ और है।


आप sudoबिना tee- sudo sh -c 'echo SOMETHING > FILE'...;)
विलफ

7
@wilf हाँ, लेकिन जब आपको उद्धरण चिह्नों की आवश्यकता होती है ", तो चीजें गड़बड़ हो जाती हैं
Braiam

3
पहले मामले में, यदि आप एन फ़ाइलों को लिखना चाहते हैं, तो मैं पसंद करूंगा echo "some text" | tee file1 file2 ... fileNऔर शायद अपील कर सकता हूं > /dev/null, अगर आप स्टडआउट पर अव्यवस्था नहीं चाहते हैं।
एल्मर ज़ेंडर

अच्छा एक @ElmarZander :)
Rinzwind

13

teeमानक इनपुट स्ट्रीम लेता है और इसे दोनों मानक आउटपुट स्ट्रीम के साथ-साथ फाइल स्ट्रीम भी लिखता है । यदि यह लोगों को याद रखने में मदद करता है, तो कमांड का नाम नलसाजी में टी-स्प्लिटर से आता है। एक अच्छा विकिपीडिया लेख है जहाँ मैंने कमांड नाम की उत्पत्ति के बारे में सीखा है।

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें


11

सबसे पहले, teeखुद को पाठ नहीं जोड़ते हैं, न ही >

यह tee -aऔर इसका पूरक है, >>कि APPENDS पाठ।

मेरा मानना ​​है कि सभी गोले >>फ़ंक्शन का समर्थन करते हैं, इसलिए यही कारण teeहै कि अधिक सामान्यतः उपयोग किया जाता है। (जरा सादे बूढ़े के बारे में सोचो sh)। टी एक कमांड है, जबकि >>एक ऑपरेटर है।

यदि आप (मेरे निजी पसंदीदा) का उपयोग करते हैं bash, >और >>बहुत अच्छे / आसान हैं।

उपयोग teeकरने से आपको केवल उस कमांड को सूडो करने की अनुमति मिलती है जिससे आपको पूरे विवरण को सूडो करने की आवश्यकता नहीं है, जैसा कि अंदर है sudo sh -c "echo foo > bar"teeआपको आउटपुट को विभाजित करने की भी अनुमति देता है। बेशक, यह सब देखा जा सकता है man tee। यह मुख्य रूप से सिर्फ आपकी व्यक्तिगत पसंद है।

आगे पढ़ने के लिए, यहां और यहां देखें ।


5
"सूडो जस्ट जस्ट दैट" पर स्पष्टिकरण, किसी के लिए भी यह थोड़ा जटिल है: जैसे फॉर्म का उपयोग करके sudo somecommand >> fileaचलेगा sudo somecommandऔर फिर, आह्वान करने वाले उपयोगकर्ता के रूप में , आउटपुट को जोड़ें fileasudo sh -c "somecommand >> filea"कार्यों का उपयोग करना , लेकिन नेस्टेड-कोटिंग बुरे सपने पैदा कर सकते हैं। उपयोग करने वाले उपयोगकर्ता के रूप में somecommand | sudo tee -a fileaरन का उपयोग करना somecommand, और फिर आउटपुट को fileaरूट के रूप में जोड़ता है - जो आमतौर पर उपयोगकर्ता चाहता था।
दारेल

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