STDOUT के बिना टी कमान के लिए वैकल्पिक


37

मैं | sudo tee FILENAMEएक ऐसी फाइल को लिखने या उसे करने में सक्षम होने के लिए उपयोग कर रहा हूं जिसके लिए सुपरसुसर अनुमतियों की आवश्यकता होती है।

यद्यपि मैं समझता हूं कि यह किसी स्थिति में क्यों सहायक है, teeफिर भी इसके इनपुट को फिर से STDOUT में भेज देता है, मैंने कभी भी वास्तव में teeकिसी भी चीज के लिए उस हिस्से का उपयोग नहीं किया । ज्यादातर स्थितियों में, यह सुविधा केवल मेरी स्क्रीन को अवांछित घबराहट से भर देती है, अगर मैं अतिरिक्त कदम नहीं उठाता हूं और इसके साथ मैन्युअल रूप से मौन रखता हूं tee 1> /dev/null

मेरा प्रश्न: क्या कोई कमांड अराउंड है, जो बिल्कुल वैसा ही काम करता है tee, लेकिन डिफ़ॉल्ट रूप से STDOUT को कुछ भी आउटपुट नहीं करता है?


यदि आप के teeसाथ प्रतिस्थापित करते हैं cat >filename, तो क्या आपको वे परिणाम मिलते हैं जो आप चाहते हैं?
चूरा

4
catफ़ाइलों को स्वयं नहीं लिखता है। और >ऑपरेटर काम नहीं करता है क्योंकि फाइलें मेरे वर्तमान उपयोगकर्ता द्वारा लिखने योग्य नहीं हैं। तो नहीं, यह थोड़ा मदद नहीं करता है। और कृपया हर 2 सेकंड में अपनी टिप्पणी के अर्थ को पूरी तरह से बदलने के लिए रुकें। इसके बजाय एक नया बनाएं।
एएफ

यदि आप के | sudo tee FILENAMEसाथ प्रतिस्थापित करते हैं | sudo cat >filename, तो क्या आपको वे परिणाम मिलते हैं जो आप चाहते हैं?
चूरा

4
नहीं, >ऑपरेटर फ़ाइल को लिखने के लिए वर्तमान शेल उपयोगकर्ता का उपयोग करता है। इस उपयोगकर्ता को neccessary अनुमतियां नहीं मिली हैं। catउसके लिए पूरी तरह से बेकार है।
एएफ

जवाबों:


30

एक और विकल्प जो सामान को वापस पाइप करने से रोकता है और फिर /dev/zeroहै

sudo command | sudo dd of=FILENAME

1
ठीक वही जो मेरे द्वारा खोजा जा रहा था। बहुत धन्यवाद।
अनफ

4
superuser.com/a/850294/68284 , अपग्रेड oflag=append conv=notruncकरने के लिए उपयोग करने के लिए अतिरिक्त विकल्पों का वर्णन करता है dd
अनफ

6

ddसमाधान अभी भी stdout में कबाड़ प्रिंट:

$ ls | sudo dd of=FILENAME
0+1 records in
0+1 records out
459 bytes (459 B) copied, 8.2492e-05 s, 5.6 MB/s

statusविकल्प के उपयोग से बचा जा सकता है:

command | sudo dd status=none of=FILENAME

एक और दिलचस्प संभावना (वैसे भी लिनक्स के लिए):

command | sudo cp /dev/stdin FILENAME

TTY इनपुट को किसी फ़ाइल में कॉपी करने के लिए, मैं अक्सर ऐसा करता हूं:

sudo cp /dev/tty FILENAME

यह बहुत बुरा है टी के पास स्टडआउट को दबाने का विकल्प नहीं है।


4

आप एक स्क्रिप्ट का उपयोग कर सकते हैं। यानी कुछ इस तरह से रखा $HOME/bin/stee, 0teeया इसी तरह:

#!/bin/bash

argv=
while [[ "$1" =~ ^- ]]; do
    argv+=" $1"
    shift
done

sudo tee $argv "$1" > /dev/null

#!/bin/bash

sudo tee "$@" > /dev/null

इसे निष्पादन योग्य बनाएं:

$ चामोद 755 रुपये

अब करते हैं:

$ ls -la | stee -a / root / फू


1
एक स्क्रिप्ट लिखना और इसे उन सभी प्रणालियों पर तैनात करना जो मैं काम करता हूं, वास्तव में मैं जो चाहता था वह नहीं है, लेकिन जब तक कोई पहले से मौजूद उपकरण का नाम नहीं देता, मुझे लगता है कि मैं आपके समाधान के साथ जाऊंगा।
अनफ

2
वास्तव में। इसे खुद देखना चाहेंगे। मैंने C में एक कार्यक्रम लिखा था, जो आपने पूछा था, लेकिन यह एक लंबा समय है और भूल गया है। जब वापस इसके लिए कोई दिलचस्पी नहीं थी। लेकिन फिर मैंने वास्तव में इसका ज्यादा विज्ञापन नहीं किया।
लुका स्टीन

2

आप अपने पूरे कमांड को सूडो में लपेट सकते हैं, इसलिए शेल स्वयं, साथ ही पुनर्निर्देशित किया जाता है root:

sudo sh -c 'do_something > FILENAME'

-1

ऐसा करने के लिए सीधे एक कार्यक्रम नहीं है (यह बहुत ही एकमात्र समय है कि यह उपयोगी होगा), लेकिन आप आसानी से अपना खुद का लिख ​​सकते हैं। यदि आप प्रोग्राम नहीं करना चाहते हैं, तो आप एक सरल शेल स्क्रिप्ट भी लिख सकते हैं जो समान कार्य करता है cat > $1:। यह इसे इनलाइन लगाने से अलग है (जैसा कि चूरा सुझाव दिया गया है) क्योंकि सूडो पुनर्निर्देशन सहित पूरी स्क्रिप्ट पर लागू होगा।


-2

मुझे पता है कि थोड़ी देर हो चुकी है, लेकिन मैं ऐसे मामलों में क्या करता हूं (जब एक 'फ्लैट' स्टडआउट लेकिन एक अस्थायी फ़ाइल की भी आवश्यकता होती है:)

tee whatever | grep -v ""

क्या आप आगे बता सकते हैं कि यह कमान क्या कर रही है?
वाइलिक्स

टी के रूप में ही> / देव / अशक्त, लेकिन बजाय एक grep कि कुछ भी नहीं से मेल खाते हैं।
00prometheus

यह आउटपुट को रीडायरेक्ट करने की तुलना में और भी अधिक हैकिंग लगता है /dev/null, और कमांड को कोई छोटा नहीं बनाता है। मूल विधि के बजाय इसका उपयोग करने से क्या फायदा होगा?
waldyrious
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.