2008-10-14 16 views
10

मैं एक स्थापित स्क्रिप्ट (जो एसपीपी का उपयोग करता है) से आउटपुट कैप्चर करने की कोशिश कर रहा हूं और इसे लॉग ऑन करता हूं। हालांकि, मुझे सब कुछ नहीं मिल रहा है जो एसपीपी प्रिंटिंग कर रहा है, अर्थात् प्रगति पट्टी।कैप्चर आउटपुट को कैप्चर और लॉग कैसे करें?

स्क्रीन उत्पादन:

प्रतिलिपि बनाई जा रही /user2/CDB/बनाता/tmp/UAT/myfiles/* करने के लिए सर्वर/उपयोगकर्ताओं/CDB

CDB @ सर्वर के पासवर्ड के रूप में myfiles: myFile 100 % | ***************************** | 2503 00:00

लॉग उत्पादन:

प्रतिलिपि बनाई जा रही /user2/CDB/बनाता/tmp/UAT/myfiles/* करने के लिए सर्वर/उपयोगकर्ताओं/CDB के रूप में myfiles

मैं वास्तव में जानना चाहता हूं कि मेरी फाइल वहां आई है। यहां कोई फायदा नहीं हुआ है कि मैं अब कोशिश कर रहा हूं:

myscript.sh 2> & 1 | tee mylogfile.log

क्या किसी के पास एसपीपी आउटपुट कैप्चर करने और इसे लॉग करने का कोई अच्छा तरीका है?

धन्यवाद।

उत्तर

7

ऐसा लगता है कि एसपीपी सफल था या नहीं, लॉग से नहीं।

मुझे लगता है कि स्क्रॉल बार stdout पर प्रिंट नहीं करता है और ncurses या किसी अन्य प्रकार के TUI का उपयोग करता है?

आप यह देखने के लिए स्कैन के वापसी मूल्य को देख सकते हैं कि यह सफल था या नहीं। जैसा

scp myfile [email protected]:. && echo success! 

man scp कहते

scp exits with 0 on success or >0 if an error occurred. 
1

शायद आप टर्मिनल सत्र लॉग करने के लिए 'script' का उपयोग कर सकते हैं।

0

हाँ मैं हाल ही में proc_open() से एक PHP स्क्रिप्ट के भीतर उत्पादन प्राप्त करने के लिए कोशिश कर रहा था मैं :-) लेकिन इसके उत्पादन प्राप्त करने की कोशिश एक शांत एक समय खो दिया है यहां थोड़ी देर हो चुकी है और फिर मैंने इस पोस्ट को पढ़कर मुझे एहसास दिलाया कि मुझे वास्तव में मेरी स्क्रिप्ट

पर बाहर निकलने के लिए जरूरी आउटपुट की आवश्यकता नहीं है बस बाहर निकलने वाला कोड नौकरी करेगा :-)

$ exit_code = proc_close ($ प्रक्रिया);

20

एसपीपी नियंत्रण कोड का उपयोग कर टर्मिनल पर अपनी प्रगति पट्टी प्रिंट करता है। यह पता लगाएगा कि क्या आप आउटपुट रीडायरेक्ट करते हैं और इस प्रकार प्रोग्रेस बार को छोड़ देते हैं।

आप के आसपास मिल सकती है कि सोच में SCP बेवकूफ़ बनाकर यह एक टर्मिनल "स्क्रिप्ट" कमांड जो डिफ़ॉल्ट रूप से सबसे distros पर स्थापित किया गया है का उपयोग करने में चलाता है:

script -q -c "scp server:/file /tmp/" > /tmp/test.txt 

test.txt की सामग्री हो जाएगा:

file 0% 0  0.0KB/s --:-- ETA 
file 18% 11MB 11.2MB/s 00:04 ETA 
file 36% 22MB 11.2MB/s 00:03 ETA 
file 54% 34MB 11.2MB/s 00:02 ETA 
file 73% 45MB 11.2MB/s 00:01 ETA 
file 91% 56MB 11.2MB/s 00:00 ETA 
file 100% 61MB 10.2MB/s 00:06 

... जो शायद आप चाहते हैं।

एक लॉग फ़ाइल में एक इंटरैक्टिव स्क्रिप्ट के आउटपुट को रीडायरेक्ट करते समय मैंने इस समस्या पर ठोकर खाई। लॉग में परिणाम नहीं होने पर समस्या नहीं थी क्योंकि आप हमेशा बाहर निकलने वाले कोड का मूल्यांकन कर सकते हैं। लेकिन मैं वास्तव में इंटरैक्टिव उपयोगकर्ता को प्रगति पट्टी देखना चाहता था। यह जवाब दोनों समस्याओं को हल करता है।

+0

सावधान रहें: यदि आप उपलब्ध हैं, तो आप 'स्क्रिप्ट' के लिए '--return' (' -r') विकल्प का उपयोग करना चाहेंगे, इसलिए बच्चे की प्रक्रिया का रिटर्न कोड संरक्षित किया जाएगा। अन्यथा, यदि आदेश विफल रहता है, तो भी आपकी 'स्क्रिप्ट' कमांड सफलतापूर्वक सफलता कोड लौटाएगी। – jwd

1
scp myfile [email protected]:. && echo success! 

बहुत उपयोगी है लेकिन मैं इसे इस

scp myfile [email protected]:. && echo myfile successfully copied! >> logfile 2>&1 

तरह बदल एक लॉग फ़ाइल के लिए संदेश लिखने के लिए और इस लिखेंगे "सफलतापूर्वक कॉपी myFile!" लॉग फ़ाइल को संदेश।

0

प्रयास करें:

scp server:/file /tmp/ > /dev/tty 
+0

इस उत्तर की व्याख्या जोड़ना एक अच्छा विचार होगा। (यह मुझे अपनी लॉग फ़ाइल में आउटपुट प्राप्त करने की संभावना के रूप में भी हमला करता है।) –

0

मैं अभी तक :(तो मैं यहां एक अपडेट जोड़ देंगे टिप्पणी नहीं कर सकता ...

@Martin मेरे लिए सबसे अच्छा समाधान था हालांकि अपने SCP आदेश है अगर अपनी स्क्रिप्ट के माध्यम से रास्ते के मध्य में तो यह मुझे लगता है कि है, क्योंकि स्क्रिप्ट एक subshell में आदेश चलाना चाहिए, लेकिन मैं अभी तक परीक्षण करने के लिए कर रहा हूँ उत्पादन आदेशों कि वास्तव में बाद में भाग गया के बाद प्रकट हो सकता है है।

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

अर्थात

स्क्रिप्ट -q -c "अपने आदेश" & & नींद 1

या इसी तरह की है, ताकि बच्चे को खोल के लिए अपने माता पिता खोल प्रतीक्षा करता है पर जाने से पहले खत्म करने के लिए कुछ।

+0

स्क्रिप्ट -qc 'नींद 10' मेरे सिस्टम पर निष्पादन ब्लॉक करता है जबकि echo | स्क्रिप्ट-सीसी 'नींद 10' नहीं है।वर्कअराउंड: इको | स्क्रिप्ट -qc 'नींद 10' | बिल्ली। मुझे लगता है कि जब तक stdin/err/out के रूप में खोल ब्लॉक अभी भी खुले हैं। – Martin

0
$ grep -r "Error" xyz.out > abc.txt 

यहां उपरोक्त आदेश में मैं फाइल abc.txt में आउटपुट संग्रहीत कर रहा हूं।

यह grep आदेश टेक्स्ट को खोज फ़ाइल में त्रुटि containg xyz.out और कंसोल पर प्रदर्शित किए बिना abc.txt में उत्पादन के भंडारण के लिए है।

संबंधित मुद्दे