2013-02-12 8 views
6

तो मैं एक पोर्टेबल bashrc/bash_profile फ़ाइल बनाने की कोशिश कर रहा हूं। मेरे पास एक ही स्क्रिप्ट है जिसे मैं प्रतीकात्मक रूप से .bashrc, .bash_profile, आदि से जोड़ रहा हूं। फिर मैं $0 देख रहा हूं और जो स्क्रिप्ट कहलाता था, उसके आधार पर मैं जो करता हूं उसे बदल रहा हूं। समस्या यह है कि शेल बशरक स्क्रिप्ट को निश्चित रूप से कॉल करता है, यह वास्तव में बैश निष्पादित करता है जिसका अर्थ है मेरे लिए $0 है। $1 और अधिक स्क्रिप्ट नाम पर सेट नहीं है।मुझे स्क्रिप्ट नाम को बैश में कैसे निष्पादित किया जा सकता है?

तो मेरा सवाल है, मैं कैसे स्क्रिप्ट का नाम निष्पादित कर सकता हूं। बाइनरी इसे निष्पादित नहीं करता, उदा। दे घुमा के?

मुझे लगता है कि मुझे -bash$1 के साथ सेट नहीं किया जा रहा है क्योंकि यह वास्तव में एक नई प्रक्रिया नहीं है। कोई विचार?

उत्तर

2

चर BASH_ARGV काम करना चाहिए, ऐसा लगता है स्क्रिप्ट being sourced

$BASH_ARGV 
+0

मतलब यह सामान्य नहीं है। $ ARGV को पार्स करते समय आपको यह जानना होगा कि आपको किसी अन्य स्क्रिप्ट द्वारा बुलाया गया है। शायद मैं गलत हूँ। यदि मैं गलत हूं तो आपको अपने उत्तर की व्याख्या को बढ़ा देना चाहिए, उदा। एक उदाहरण जोड़ें – hek2mgl

24

प्रयास करें:

readlink -f ${BASH_SOURCE[0]}

या बस:

${BASH_SOURCE[0]}

टिप्पणियां:

$0 केवल काम करता है जब उपयोगकर्ता "./script.sh"

$BASH_ARGV ही काम करता है उपयोगकर्ता को निष्पादित करता है जब निष्पादित करता है या "स्रोत script.sh"

"script.sh।"

${BASH_SOURCE[0]} दोनों मामलों पर काम करता है।

readlink -f उपयोगी है जब प्रतीकात्मक लिंक का उपयोग किया जाता है।

+0

है इस के बाद से यह और अधिक विस्तार देता है और विभिन्न परिदृश्यों साफ बताते स्वीकार किए जाते हैं जवाब चाहिए। – piratemurray

संबंधित मुद्दे

 संबंधित मुद्दे