लिनक्स: कैसे लकड़हारा और stderr को लकड़हारा पर पुनर्निर्देशित करें?


22

मेरे पास एक कार्यक्रम है जिसे मुझे स्टार्टअप पर चलाने की आवश्यकता है, इसमें स्टडआउट और स्टडर पर आउटपुट है जिसे मैं लॉगर कमांड का उपयोग करके सिस्टम लॉग पर पुनर्निर्देशित करना चाहता हूं। मेरी स्टार्टअप स्क्रिप्ट में जो कुछ है वह है:

/ home / dirname / application_name -v | लकड़हारा 2> और 1 &

यह ठीक से syslog करने के लिए stdout को पुनर्निर्देशित कर रहा है, लेकिन stderr कंसोल पर आ रहा है, इसलिए मुझे कमांड को परिष्कृत करने की आवश्यकता है।


जवाबों:


30

आपको इसे पाइप करने से पहले STDERR और STDOUT के आउटपुट को संयोजित करना होगा logger। इसके बजाय यह प्रयास करें:

/home/dirname/application_name -v 2>&1 | logger &

उदाहरण

$ echo "hi" 2>&1 | logger &
[1] 26818
[1]+  Done                    echo "hi" 2>&1 | logger

$ sudo tail /var/log/messages
Apr 12 17:53:57 greeneggs saml: hi

आप यहाँ संक्षिप्त संकेतन का उपयोग कर सकते हैं, यदि सावधानी से वास्तविक बैश शेल में उपयोग किया जाता है (डैश के साथ भ्रमित नहीं होने के लिए):

$ echo "hi" |& logger &

नोट: यह इसके बराबर है <cmd1> 2>&1 | <cmd2>। अंत में केवल एक वास्तविक बैश शेल का उपयोग अंतःक्रियात्मक रूप से करते समय उपरोक्त का उपयोग करें, यह दृष्टिकोण करने का एक अच्छा तरीका होगा।

ABSG से अंश

# = & Bash 4 में 2> और 1 के लिए एक संक्षिप्त नाम के रूप में जोड़ा गया था।

संदर्भ


2
एसएलएम, कोई अपराध नहीं था, लेकिन बाद का रूप बड़े पैमाने पर घिनौना दुरुपयोग है। इस तरह के अनावश्यक शॉर्टहैंड के कारण जितने मुद्दे हो सकते हैं, वे इस लायक नहीं हैं कि उनके इस्तेमाल से कितना कम लाभ हो सकता है। उदाहरण के लिए, यहां तक ​​कि सिर्फ अपनी मशीन पर, यदि आप एक स्क्रिप्ट में उपरोक्त डालते dashहैं और केवल बूट करने के लिए स्क्रिप्ट को निष्पादित करने की कोशिश करते हैं और अपनी बूट प्रक्रिया को विफल करने के लिए ... अच्छी तरह से ... जब इस तरह के वाक्यविन्यास का उल्लेख किया जाना चाहिए हमेशा के संदर्भ में होने इंटरैक्टिव गोले केवल , या कम से कम, इस तरह मेरी राय है।
mikeserv

@ माइकर्स - कोई अपराध नहीं 8-)। मैं इन्हें तब से शामिल करता हूं जब से वे ABSG गाइड में हैं। मैंने माना (संभवतः गलत तरीके से) कि ओपी बैश का उपयोग कर रहे थे क्योंकि उन्होंने दिखाया था 2>&1लेकिन आपके चेतावनियां काफी बुद्धिमान हैं, उदाहरण के लिए स्टार्टअप से निपटना है। मैं उन बाद की युक्तियों को अधिक प्रमुख w / चेतावनी बना दूँगा कि वे केवल बैश गोले के लिए इंटरैक्टिव हैं।
स्लम

@mikeserv - यह ध्वनि सलाह है। मैं आम तौर पर डैश या उबंटू का उपयोग नहीं करता हूं, इसलिए मैं इन मुद्दों से थोड़ा बेखबर हूं, लेकिन वे अभी भी बहुत वास्तविक हैं और उबंटू / डेबियन / डैश के बाद से उन्हें इंगित करना अच्छा है क्योंकि अधिक सामान्य परिदृश्य होने की संभावना है।
स्लम

मैं ईमानदारी से या तो डेबियन का उपयोग नहीं करता हूं, लेकिन मैं अधिक से अधिक जागरूक हो रहा हूं। मैं उपयोग करता हूं dash, हालांकि - यह वास्तव में तेज है।
माइकसर्व

1
ठीक है, यह आवश्यक नहीं हो सकता है - आप इसके लिए पर्याप्त तेजी से टाइप नहीं कर सकते हैं ताकि एक इंटरैक्टिव शेल में अंतर हो सके - जिसके लिए मैं zsh का उपयोग करता हूं। लेकिन, स्क्रिप्ट के लिए, डैश मेरे द्वारा किए गए किसी भी अन्य की तुलना में तेज़ है।
1:13 पर mikeserv
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.