stderr पुनर्निर्देशन csh में काम नहीं कर रहा है


11

मैं निम्नलिखित कमांड चलाता हूं:

pkg_add emacs-23.4,2.tbz 2> output.log

आउटपुट अभी भी टर्मिनल में प्रदर्शित होता है। जब मैं दबाता हूं , मुझे मिलता है

pkg_add emacs-23.4,2.tbz 2 > output.log

से पहले एक जगह के साथ2

मैंने मूल रूप से इसे नहीं रखा है। मैं कोशिश करूँगा

pkg_add emacs-23.4,2.tbz > output.log 2>&1

दोबारा, जब मैं दबाता हूं , तो रिक्त स्थान जोड़ दिए गए हैं

मेरे साथ ऐसा क्यों हो रहा है?

मैं FreeBSD पर csh चला रहा हूं।

जवाबों:


12

2> रीडायरेक्ट csh या tsh के साथ काम नहीं करता है।

शैली पुनर्निर्देशन chshका उपयोग करने के लिए अपने शेल को / बिन / श / या usr / स्थानीय / बिन / बैश में बदलने के लिए कमांड का उपयोग करें 2>नोट: रूट के शेल को / usr / लोकल / बिन / बैश में न बदलें

csh और tcsh मानक को अलग और त्रुटि को पुनर्निर्देशित नहीं कर सकते, लेकिन >&संयुक्त आउटपुट को एक फ़ाइल में पुनर्निर्देशित करेंगे।


+1 और ✔। मैंने प्रयोग करके गोले बदल दिए sh
गैजेटमो

1
@ क्रेग वह pkg_addफ्रीबीएसडी पर चल रहा है, इसलिए मैं मान रहा हूं कि यह रूट यूजर के लिए है (/ बिन / सीएचएस फ्रीबीएसडी पर रूट के लिए डिफ़ॉल्ट है)। इस स्थिति में आपको शेल को / usr / लोकल / बिन / बैश में नहीं बदलना चाहिए । / बिन / श स्वीकार्य है। आप रूट के रूप में लॉग इन करने के बाद बस दूसरे शेल पर भी जा सकते हैं।
जेम्स ओ'गॉर्मन

@ JamesO'Gorman अच्छा पकड़ मैंने अपना जवाब अपडेट किया।
क्रेग

20

मुझे यकीन नहीं है कि आप STDERR को छिपाने की कोशिश कर रहे हैं या इसे STDOUT में रीडायरेक्ट कर रहे हैं।

किसी फ़ाइल में STDOUT को पुनर्निर्देशित करना:

pkg_add emacs-23.4,2.tbz > stdout.log

किसी फ़ाइल में STDOUT और STDERR को पुनर्निर्देशित करना:

pkg_add emacs-23.4,2.tbz > & stdxxx.log

किसी फ़ाइल में STDOUT को पुनर्निर्देशित करना और STDERR को छिपाना:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & /dev/null

STDERR को कंसोल और छिपाने के लिए STDOUT को रीडायरेक्ट करने के लिए:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & /dev/null

किसी फ़ाइल में कंसोल और STDERR पर STDOUT को पुनर्निर्देशित करना:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & stderr.log

किसी फ़ाइल और STDERR के लिए STDOUT को एक फ़ाइल में पुनर्निर्देशित करना:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & stderr.log

संपादित करें: यह कार्य करने का कारण यह है कि पहले () में कार्रवाई होती है; एर्गो, अगर हमने STDOUT को रीडायरेक्ट किया है, तो यह अब () के बाहर उपलब्ध नहीं होगा। यह हमें सिर्फ STDERR के साथ छोड़ देता है, और फिर हम वांछित के रूप में पुनर्निर्देशित कर सकते हैं।


हाय @nikc, यूनिक्स में आपका स्वागत है। आपकी टिप्पणी उपयोगी और ज्ञानवर्धक है। मैं आपके उत्तर को संपादित करने का सुझाव दूंगा और इसे सही तरीके से इसमें शामिल करूंगा ताकि यह आसानी से याद न हो।
डीआरएस

1

मुझे पता है कि इसे Csh में कैसे करना है, लेकिन 2 गोले का उपयोग करना:

csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt

इस तरह से केवल stderout करने के लिए, फ़ाइल के बिना।

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