2010-12-16 10 views
8

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

मैंने कोशिश की, उदाहरण के लिए:

progname > out.txt 
progname > out.txt 2&>1 

और कुछ भी नहीं out.txt में और कंसोल में प्रकट होता है।

मैंने एप्लिकेशन को स्ट्रेस के साथ चलाने की कोशिश की। जब मैं पुनर्निर्देशन का उपयोग नहीं करते, मैं इस तरह के रूप लाइनों को देखने -

write(1, "bla bla", 8) 

जब मैं उत्पादन पुनर्निर्देशन परिचय, कोई लिखने बिल्कुल जो बनाता है मुझे लगता है कि आवेदन संदेश लिखने से पहले कुछ करने के लिए परीक्षण कर रहा है कहता है, देखते हैं। आवेदन क्या देख रहा है? मैं इसे कैसे बाईपास कर सकता हूं?

मैं CentOS 5.5 और बैश का उपयोग कर रहा हूं।

उत्तर

5

आपकी स्ट्रेस के आधार पर ऐसा लगता है कि प्रोग्राम परीक्षण कर रहा है अगर stdin और/stdout एक tty है। मैंने इसका कभी भी उपयोग नहीं किया है लेकिन आप blank.sourceforge.net का उपयोग करने का प्रयास कर सकते हैं। ऐसा लगता है कि एक छद्म-टीटीआई बनाना है जो आपके कार्यक्रम की जांच को मूर्ख बनाना चाहिए।

+0

धन्यवाद! यह काम करता है - खाली-एफ -एल out.txt progname – kshahar

9
progname > out.txt 2>&1 

संपादित: आप वास्तव में ऐसा किया है और यह अपने प्रश्न में कोई गलती से हुआ है तो। यह संभव हो सकता है कि एप्लिकेशन जांचता है कि आउटपुट एक टीटीवी है या नहीं।

EDIT2: ठीक है, उस स्थिति में, कोशिश script -qc progname > out.txt > 2>&1

Debian/Ubuntu में, scriptbsdutils पैकेज है जो एक आवश्यक पैकेज है और हमेशा स्थापित का एक हिस्सा है। एक समय के लिए/dev/बातिल में एक ही धारा अनुप्रेषित

+0

ठीक है, प्रश्न में एक टाइपो है। लेकिन वैसे भी, मुझे पता है कि एप्लिकेशन stdout का उपयोग कर रहा है। यदि यह टीटीवी की जांच करता है तो मैं आउटपुट संदेश कैसे प्राप्त कर सकता हूं? – kshahar

1

कोशिश करने के लिए, को देखने के लिए जो भी उस पर प्रिंट:

progname > /dev/null 
progname 2> /dev/null 

तो फिर तुम जो स्ट्रीम आप पर कब्जा करने के लिए है देखेंगे। तकनीकी कारणों से कुछ कार्यक्रम stdout पर भी सूचनात्मक संदेश प्रिंट करते हैं।