2013-01-09 25 views
7

में किसी फ़ाइल में आउटपुट को रीडायरेक्ट करने के लिए टीई कमांड का उपयोग करें। मैं एक फ़ाइल में आउटपुट रीडायरेक्ट करने के लिए टीई कमांड का उपयोग करने की कोशिश कर रहा हूं, और मैं चाहता हूं कि फ़ाइल को एक डीआईआर में बनाया जाए जो अभी तक बनाया नहीं जा रहा है । new_dir/new_file: इस तरह के कोई फ़ाइल या निर्देशिकागैर-मौजूद डीआईआर

अगर मैं चलाने से पहले new_dir बनाने

date | tee new_dir/new_file 

जब new_dir वहाँ नहीं है, टी आदेश कह

टी विफल रहता है टीई कमांड, तो यह ठीक काम करता है, लेकिन किसी कारण से मैं मैन्युअल रूप से new_dir नहीं बनाना चाहता, क्या tee कमांड के साथ new_dir बनाना संभव है?

उत्तर

11

नहीं। tee चलाने से पहले आपको निर्देशिका बनाना होगा।

+0

निर्देशिका मेरे मामले में पहले से मौजूद है, लेकिन टी शिकायत करता है कि फ़ाइल मौजूद नहीं है, अगर मैं टी के साथ ध्वज का उपयोग नहीं करता हूं। –

2

एक समारोह है कि आप के लिए निर्देशिका बनाता है साथ tee बदलें:

tee() { mkdir -p ${1%/*} && command tee "[email protected]"; } 

आप जब एक साधारण फ़ाइल नाम के साथ लागू समारोह काम करने के लिए करना चाहते हैं:

tee() { if test "$1" != "${1%/*}"; then mkdir -p ${1%/*}; fi && 
    command tee "$1"; } 
+0

'tee foo.txt' => 'mkdir -p foo.txt && कमांड टीई" foo.txt "' मुझे नहीं लगता कि यह काफी सही है ... – twalberg

+0

यदि मजबूती वांछित है, तो एक चेक निश्चित रूप से जोड़ा जा सकता है .. –

1
mkdir ./new_dir && date | tee ./new_dir/new_file 

यह बाद से tee कमांड है, यह एक साथ new_file और stdout

दोनों को लिखता है
0

हम्म ... कुछ प्रयोगों के बाद, मुझे कुछ रोचक चीज़ें मिली हैं।

सबसे पहले, चलो कुछ फ़ाइल को छूने की कोशिश करते हैं:

touch ~/.lein/profiles.clj 

यह ठीक काम करता है।

touch "~/.lein/profiles.clj" # => touch: cannot touch ‘~/.lein/profiles.clj’: No such file or directory 

तो, मेरी पार्टी समारोह के लिए:

append_to_file() { 
    echo $2 | tee -a $1 
} 

कि मैं इसे से फोन बदल के बाद:

append_to_file '~/.lein/projects.clj' '{:user {:plugins [[lein-exec "0.3.1"]]}}' 
इसे करने के लिए

(पहला तर्क लेकिन के उद्धरण के साथ एक ही बात का उपयोग करते हैं उद्धरण के बिना):

append_to_file ~/.lein/projects.clj '{:users {:plugins [[lein-exec "0.3.1"]]}}' 

और सब ठीक हैं।

अद्यतन

इस मामले .lein मौजूदा निर्देशिका के रूप में मानता है।

+3

'स्पर्श" ~/.lein/profiles.clj "' विफल रहता है क्योंकि डबल कोट्स टिल्डे-विस्तार को रोकते हैं। – twalberg