तकनीकी रूप से यह कहने का कोई तरीका नहीं है कि stdin/stdout/stderr "पुनर्निर्देशित" हैं क्योंकि आप नहीं जानते कि आपकी स्क्रिप्ट का आविष्कार क्या है। यदि इसे किसी अन्य खोल से नहीं बुलाया जा रहा है, तो "पुनर्निर्देशन" की कोई अवधारणा नहीं है।
आपको बस इतना करना है कि इन/आउट/ग़लत फ़ाइल डिस्क्रिप्टर किस प्रकार हैं (टर्मिनल, फीफो, पाइप, डिवाइस, फ़ाइल इत्यादि)। आम तौर पर आप यह जानना चाहते हैं कि आपका आउटपुट कुछ उपयोगकर्ता की स्क्रीन पर जा रहा है या फिर यह दूसरी प्रक्रिया में जा रहा है या नहीं। इस मामले में मैट के उत्तर के अनुसार [ -t 1 ]
का उपयोग करें।
यदि आप यह जानना चाहते हैं कि आपकी प्रक्रिया को कहां/रीडायरेक्ट किया गया है, तो सिम्लिंक /proc/$$/fd/1
और /proc/$$/fd/2
के लक्ष्यों की जांच करें।
ध्यान दें कि कोई व्यक्ति आपकी प्रक्रिया के आउटपुट को ./myscript.sh > /dev/pts/1234
के साथ एक अलग टर्मिनल से जोड़ सकता है। फिर यह "पुनर्निर्देशित" होगा, लेकिन stdout अभी भी एक टर्मिनल होगा।
उदाहरण:
$ ls -l /proc/$$/fd/1 > results
$ bash -c 'ls -l /proc/$$/fd/1 >>results' > /dev/null
$ bash -c 'ls -l /proc/$$/fd/1 >>results' |cat
$ bash -c 'ls -l /proc/$$/fd/1 >>results' > /dev/pts/0
$ cat results
lrwx------ 1 je4d je4d 64 2012-02-17 21:09 /proc/2463/fd/1 -> /dev/pts/11
l-wx------ 1 je4d je4d 64 2012-02-18 13:17 /proc/8302/fd/1 -> /dev/null
l-wx------ 1 je4d je4d 64 2012-02-18 13:17 /proc/8304/fd/1 -> pipe:[222798]
l-wx------ 1 je4d je4d 64 2012-02-18 13:17 /proc/8307/fd/1 -> /dev/pts/0
[ -t 1 ]
1 और उन के 4 के लिए सच हो जाएगा।
यह काम करता है जैसा मैं कामना करता हूं! बहुत बहुत धन्यवाद – Sigmun