शीर्षक यह सब कहना चाहिए। मैं zsh में ${BASH_SOURCE[0]}
के बराबर की तलाश में हूं।
नोट: मैं खोजने "$0
${BASH_SOURCE[0]}
के बराबर है" इंटरनेट के आसपास रखने के लिए, लेकिन यह गलत हो रहा है: $0
क्रियान्वित आदेश के नाम पर हो रहा है। (यह argv[0]
है, जो समझ में आता है।) मेरी स्क्रिप्ट में $ 0 प्रतिबिंबित करना (.zshrc
) $0
के लिए देता है, जो ${BASH_SOURCE[0]}
जैसा नहीं है। वास्तव में, ${BASH_SOURCE[0]}
में काम करता है, .zshrc
फ़ाइलों के अंदर छोड़कर।
क्या मैं वास्तव में मेरे .zshrc
में कर रहा हूँ (जो काम नहीं कर रहा):
echo ${BASH_SOURCE[0]}
source `dirname $0`/common-shell-rc.sh
स्रोत में विफल रहता है ($0
zsh
है) और echo
एक रिक्त पंक्ति आउटपुट।
संपादित करें:
जाहिरा तौर पर,
यह स्पष्ट रूप से तब तक है जब तक आप $0
काम करने के लिए, मैं विकल्प
FUNCTION_ARGZERO
विकल्प सेट की जरूरत है। यह जांचने का कोई तरीका है कि यह एक स्क्रिप्ट में सेट है या नहीं? (ताकि मैं इसे अस्थायी रूप से सेट कर सकूं)
nofunction_argzero
सेट नहीं करते हैं, और यह मेरे खोल में है। अभी भी $0
के लिए कुछ भी नहीं मिला। (मुझे लगता है कि बी/सी मैं एक समारोह में नहीं हूं।)
मुझे अभी भी यकीन नहीं है कि यह सही है। इन दो फाइलें बनाएं: 'foo' जिसमें' स्रोत।/Foo2' और 'foo2'' echo $ 0' है। अब '।/Foo' चलाएं, और आपको'।/Foo' का आउटपुट मिलेगा, जो कि सोर्स की गई स्क्रिप्ट का नाम नहीं है। '$ {' को' $ {BASH_SOURCE [0]} 'के साथ बदलें, बैश के साथ फिर से चलाएं, और आपको '।/Foo2' मिल जाएगा। – Thanatos
@ तानाटोस मुझे '/ foo2' (zsh 4.3.10 मिलता है; यह किसी बिंदु पर बदल सकता है, लेकिन 4.0 के बाद से नहीं)। आपके निर्देशों की तुलना में, मैंने zsh के अंतर्गत स्क्रिप्ट चलाने के लिए 'foo' के शीर्ष पर' #!/Bin/zsh' जोड़ा। क्या आप वाकई zsh के तहत 'foo' चला रहे हैं? – Gilles
बस स्पष्टीकरण और जोर देने के लिए ... ** 'zsh' ** (और संभवतः अन्य गोले) में,' $ 0' का मान सोर्स स्क्रिप्ट है जो कॉलर स्क्रिप्ट नहीं है। यह नहीं है कि यह बैश में कैसे काम करता है। तो zsh में '$ 0' बैश में' $ {BASH_SOURCE [0]} 'जैसा ही है। – toxalot