डैश शेल के लिए DEBUG सिग्नल पर ट्रैप करें?


9

बैश शेल के साथ, आप सिंथेटिक DEBUGसिग्नल पर एक जाल स्थापित कर सकते हैं । यह उपयोगी है और प्रत्येक शेल कमांड पर आपके फ़ंक्शन या बिट कोड को निष्पादित करेगा। उदाहरण के लिए:

$ trap 'logger -t shell "${BASH_COMMAND}"' DEBUG

उदाहरण के लिए, किसी फ़ाइल में जाल को स्थापित करने का विचार है, उदाहरण के लिए, /etc/profile.d/bash-loggerऔर किसी भी उपयोगकर्ता शेल सत्र कमांड को स्वचालित रूप से लॉग इन करना है जब भी वे ऐसा करते हैं। दूरस्थ कमांड को आसानी से ट्रेस करने के लिए भी यह उपयोगी है ।

डैश शेल स्रोत कोड को देखकर, मुझे लगता है कि ऐसा कोई DEBUGसंकेत उपलब्ध नहीं है।

क्या डैश शेल के साथ समान परिणाम प्राप्त करने के लिए कोई वर्कअराउंड या विकल्प हैं?


किस बारे में while read -r line; do logger -t shell "$line"; command "$line"; done < myscript.sh? यदि यह काम करता है तो मैं एक उत्तर में कुछ लाइन जोड़ सकता हूं।
हस्त्तूर

@ हस्तूर मुझे लगता है कि आपका मतलब हैeval "$line"
स्टीवन पेनी

@StevenPenny हाँ, मैं लिख रहा था eval <command>और मैं गलत भाग को रद्द करता हूँ, ऐसा होता है ... निश्चित रूप से हमेशा अगर आप अपनी स्क्रिप्ट को उपनाम / फ़ंक्शन वाले के बजाय डिस्क पर कमांड का उपयोग करने के लिए मजबूर नहीं करना चाहते ...◉‿◉
Hastur

क्षमा करें, लेकिन यह बहुत मदद नहीं कर रहा है। उदाहरण के लिए, इसमें फंसी हुई फ़ाइल में जाल को स्थापित करना है, /etc/profile.d/bash-loggerऔर किसी भी उपयोगकर्ता शेल सत्र कमांड को स्वचालित रूप से लॉग इन करना है।
कॉस्मो

2
यह वास्तव में इस प्रश्न के लिए सही साइट नहीं है। अगर यह काम नहीं करता है, तो मैं और अधिक इनाम जोड़ रहा हूँ। आप इसे हटाने और unix.stackexchange.com
स्टीवन पेनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.