मुझे ऐसा करने की आदत हो गई है:
someprogram >output.file
मैं इसे तब करता हूं जब मैं उस आउटपुट को सहेजना चाहता हूं जो एक प्रोग्राम एक फ़ाइल में उत्पन्न करता है। मैं इस IO पुनर्निर्देशन के दो प्रकारों से भी अवगत हूँ :
someprogram 2>output.of.stderr.file
(stderr के लिए)someprogram &>output.stderr.and.stdout.file
(दोनों stdout + stderr के लिए संयुक्त)
आज मैंने ऐसी स्थिति में भाग लिया है, जिसके बारे में मैंने सोचा ही नहीं था। मैं निम्नलिखित कमांड का उपयोग करता हूं xinput test 10
और जैसा कि मुझे उम्मीद है कि मेरा निम्न आउटपुट है:
user @ hostname: ~ $ xinput test 10 कुंजी प्रेस 30 प्रमुख रिलीज 30 कुंजी प्रेस 40 प्रमुख रिलीज 40 कुंजी प्रेस 32 प्रमुख रिलीज 32 कुंजी प्रेस 65 प्रमुख रिलीज 65 कुंजी प्रेस 61 प्रमुख रिलीज 61 कुंजी प्रेस 31 ^ सी उपयोगकर्ता @ होस्टनाम: ~ $
मुझे उम्मीद थी कि यह आउटपुट हमेशा की तरह एक फाइल में सेव किया जा सकता है xinput test 10 > output.file
। लेकिन जब मेरी अपेक्षा के लिए गर्भनिरोधक फ़ाइल आउटपुट। फ़ाइल खाली रहती है। यह भी xinput test 10 &> output.file
सिर्फ यह सुनिश्चित करने के लिए सही है कि मैं stdout या stderr पर कुछ याद नहीं करता हूं।
मैं वास्तव में भ्रमित हूं और इसलिए यहां पूछ रहा हूं कि क्या xinput
कार्यक्रम में इसके उत्पादन से बचने का कोई तरीका हो सकता है?
अपडेट करें
मैंने स्रोत पर गौर किया है। ऐसा लगता है कि आउटपुट इस कोड से उत्पन्न होता है (नीचे स्निपेट देखें)। यह मुझे लगता है कि उत्पादन एक साधारण प्रिंटफ द्वारा उत्पन्न किया जाएगा
// फ़ाइल test.c में स्थिर शून्य प्रिंट_वेंट्स (प्रदर्शन * dpy) { एक्सवेंट इवेंट; जबकि (1) { XNextEvent (dpy, और घटना); // [... कुछ अन्य घटना प्रकारों को यहां छोड़ दिया गया है ...] अगर (Event.type == key_press_type) || (Event.type == key_release_type)) { इंट लूप; XDeviceKeyEvent * कुंजी = (XDeviceKeyEvent *) & घटना; प्रिंटफ ("कुंजी% s% d", (Event.type == key_release_type); "रिलीज़": "प्रेस", कुंजी-> कीकोड); (लूप = 0; लूपैक्स_काउंट; लूप ++) { प्रिंटफ ("[a% d] =% d", कुंजी-> first_axis + लूप, कुंजी-> axis_data [लूप]); } printf ( "\ n"); } } }
मैंने इसके लिए स्रोत को संशोधित किया (नीचे अगला स्निपेट देखें), जो मुझे स्टैडर पर आउटपुट की एक प्रति रखने की अनुमति देता है। यह आउटपुट मैं पुनर्निर्देशित करने में सक्षम हूं:
// फ़ाइल test.c में स्थिर शून्य प्रिंट_वेंट्स (प्रदर्शन * dpy) { एक्सवेंट इवेंट; जबकि (1) { XNextEvent (dpy, और घटना); // [... कुछ अन्य घटना प्रकारों को यहां छोड़ दिया गया है ...] अगर (Event.type == key_press_type) || (Event.type == key_release_type)) { इंट लूप; XDeviceKeyEvent * कुंजी = (XDeviceKeyEvent *) & घटना; प्रिंटफ ("कुंजी% s% d", (Event.type == key_release_type); "रिलीज़": "प्रेस", कुंजी-> कीकोड); fprintf (stderr, "key% s% d", (Event.type == key_release_type)? "release": "press", key-> keycode); (लूप = 0; लूपैक्स_काउंट; लूप ++) { प्रिंटफ ("[a% d] =% d", कुंजी-> first_axis + लूप, कुंजी-> axis_data [लूप]); } printf ( "\ n"); } } }
वर्तमान में मेरा विचार यह है कि शायद रीडायरेक्ट करने से प्रोग्राम की-प्रेस की-रिलीज़ घटनाओं की निगरानी करने की क्षमता खो देता है।