एक स्क्रिप्ट के आउटपुट की कॉपी एक फाइल को भेजें


10

मान लें कि मेरे पास एक Zsh स्क्रिप्ट है और मैं इसे आउटपुट प्रिंट करने देना चाहता हूं STDOUT, लेकिन इसके आउटपुट को डिस्क में फाइल में कॉपी (डंप) भी कर सकता हूं ।

इसके अलावा, स्क्रिप्ट निम्न विकल्प से शुरू होती है

set -o xtrace

जो इसे क्रिया करने के लिए मजबूर करता है और प्रिंट करता है कि यह किस कमांड को चलाता है। मैं इस आउटपुट के साथ ही डिस्क में एक फ़ाइल पर कब्जा करना चाहूंगा।

मेरी समझ यह है कि अगर मैं

./my_script.sh > log.txt

यह सिर्फ भेज देंगे STDOUTकरने के लिए log.txtहै, लेकिन क्या हुआ अगर मैं भी टर्मिनल में उत्पादन को देखने के लिए सक्षम होना चाहते हैं?

मैंने ज़श के बारे में teeऔर MULTIOSविकल्प के बारे में पढ़ा है, लेकिन यह निश्चित नहीं है कि उनका उपयोग कैसे किया जाए।

जब मैं करता हूं:

./my_script | tee log.txt

मैं टर्मिनल पर आउटपुट देख सकता हूं, लेकिन फ़ाइल log.txtसब कुछ कैप्चर करने के लिए नहीं है (वास्तव में यह मुश्किल से कुछ भी कैप्चर करता है)।


./my_script.sh > log.txt 2>&1
mikeserv

लगता है कि आप scriptकमांड की तलाश कर रहे हैं । या हो सकता हैmyscript >&1 > log.txt 2>&1
स्टीफन चेज़लस

जवाबों:


12

यह हो सकता है कि अपनी स्क्रिप्ट के लिए उत्पादन का निर्माण कर रहा है stdoutऔर stderrहै, और आप केवल अपने लॉग फ़ाइल के लिए उन धाराओं उत्पादन में से एक हो रही है।

./my_script.sh | tee log.txtवास्तव में टर्मिनल के लिए सब कुछ उत्पादन करेगा, लेकिन केवल stdoutलॉगफाइल को डंप करेगा ।

./my_script.sh > log.txt 2>&1 लॉग फ़ाइल के लिए सब कुछ डंपिंग के विपरीत है, लेकिन स्क्रीन पर कुछ भी प्रदर्शित नहीं करेगा।

चाल के साथ दो गठबंधन करने के लिए है tee:

./myscript.sh 2>&1 | tee log.txt

यह पुनर्निर्देशित stderr( 2) में stdout( 1), फिर पाइप stdoutकरता है tee, जो इसे टर्मिनल और लॉग फ़ाइल में कॉपी करता है ।

zshMultios बराबर होगा:

./myscript.sh >&1 > log.txt 2>&1

यही है, मूल stdout और log.txt दोनों को पुनर्निर्देशित करें (आंतरिक रूप से एक पाइप के माध्यम से किसी चीज़ की तरह काम करता है tee), और फिर उस पर और साथ ही साथ (आंतरिक tee-समान प्रक्रिया के लिए पाइप) पर पुनर्निर्देशित करें ।


धन्यवाद - अपनी अंतिम पंक्ति के बारे में, क्यों नहीं ./myscript.sh >&1 2>&1 > log.txt? (यानी पिछले दो पुनर्निर्देशन के क्रम को बदलना)। क्या उनके बीच कोई अंतर होगा?
अमेलियो वाज़केज़-रीना

आपका वेरिएंट stdoutसिर्फ आउटपुट नहीं करता है log.txt। उत्तर में अंतिम पंक्ति (@ StéphaneChazelas द्वारा जोड़ा गया और खुद नहीं) दोनों के लिए आउटपुट।
सवंतो

0

nohup एक काम को जारी रखने की अनुमति देता है भले ही कंसोल मर जाता है या बंद हो जाता है, लंबा बैकअप आदि के लिए उपयोगी है, लेकिन यहां हम इसके स्वचालित लॉगिंग का उपयोग कर रहे हैं।

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