क्रेप पुनर्निर्देशन के साथ काम क्यों नहीं करता है?


15

topपुनर्निर्देशन के साथ कमांड का उपयोग ठीक काम करता है:

top > top.log

अब मैं एक निश्चित लाइन को फ़िल्टर करने के लिए grep का उपयोग करना चाहता हूं:

top | grep "my_program" > top.log

लेकिन लॉग फाइल खाली रहेगी। लेकिन grep उपयोग करते समय एक आउटपुट देता है

top | grep "my_program"

जहां my_programकुछ आउटपुट देखने के लिए एक रनिंग प्रोग्राम को बदलना पड़ता है।

मेरा दृष्टिकोण काम क्यों नहीं करता है? और मैं इसे कैसे ठीक कर सकता हूं?

bash  grep 

2
मैंने बस कोशिश की, और यह मेरे लिए काम करता है। हालांकि, आपको संभवतः इसके बजाय -bविकल्प का topउपयोग करना या देखना चाहिए ps
लेव लेवित्स्की

-bमेरी समस्या को हल नहीं किया, लेकिन कुछ एन्कोडिंग समस्याओं को हल किया। धन्यवाद।

जवाबों:


22

मुझे वही व्यवहार मिलता है जिसका आप वर्णन करते हैं। उबंटू 11.10 पर

top | grep "my_program" > top.log

कोई आउटपुट नहीं देता है।

मेरा मानना ​​है कि इसका कारण यह है कि grep अपने आउटपुट को बफ़र कर रहा है। GNU grep को आउटपुट लाइन-बाय-लाइन बताने के लिए, --line-bufferedविकल्प का उपयोग करें :

top | grep --line-buffered "my_program" > top.log

अन्य संभावित समाधानों के लिए यह SO प्रश्न भी देखें ।


3
+1 --line-bufferedसमस्या हल करता है।

धन्यवाद, यह मेरे लिए भी समस्या हल करती है। -bविकल्प अभी भी लेव Levitsky से एक अच्छी सलाह है, भी है। लॉग फ़ाइल के साथ कुछ एन्कोडिंग समस्याओं को हल किया।

2

आपको उपयोग करना चाहिए:

top -n 1 | grep "blah" > top.log

"-n 1" एक पुनरावृत्ति के लिए शीर्ष पर चलता है और फिर हर कुछ सेकंड में लगातार अपडेट करने के बजाय क्विट करता है

चूँकि आप बस एक लाइन की तलाश में हैं, हालांकि ps उपयोग करने के लिए एक बेहतर उपकरण होगा।


1

इस समस्या के लिए मेरा समाधान था:

while :;do top -b -n 1 | grep "my_program" >> top.log;done &

इस तरह मैं my_program के लिए बैकग्राउंड में एक रनिंग मॉनिटर रख सकता था और सभी परिणाम फाइल top.log में रख सकता था।



0

हालांकि मेरे लिए दोनों काम करते हैं, मुझे लगता है कि लेव लेवित्स्की की सलाह सही है। -bतर्क का उपयोग करें ।

एक अच्छा मौका है कि आउटपुट पुनर्निर्देशन समस्या है और आपको स्टडआउट के माध्यम से कुछ भी नहीं मिल रहा है, इसलिए इसके बजाय यह प्रयास करें:

top -b 2>&1 | grep "my_program" > top.log

ध्यान दें कि आपको आउटपुट बफ़रिंग असवेल के साथ समस्या हो सकती है। आपका शेल फ़ाइल में लगातार नहीं लिखेगा ताकि उसे top.logभरने में कुछ समय लग सके ।

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