shebang
किसी स्क्रिप्ट को निष्पादित करने के लिए दुभाषिया का उपयोग करने के लिए एक लाइन का उपयोग कर सकते हैं :
#!/bin/bash
echo "Hello world"
मेरा प्रश्न यह है कि हम स्क्रिप्ट में कैसे निर्धारित कर सकते हैं कि दुभाषिया वास्तव में उपयोग किया जाता है। निम्नलिखित काम नहीं करता है:
echo $0
echo $SHELL
sh scriptname
- यह शेबबैंग को अनदेखा करता है और स्क्रिप्ट को जो भी "श" के साथ चलाता है वह पहले $PATH
(और यहां तक कि अगर बैश है, तो यह कुछ बैश एक्सटेंशन के साथ चलता है)।
./scriptname
, जैसे , फ़ाइल निष्पादन योग्य होना चाहिए, ps -e
दिखाता है scriptname
। मैं एक स्क्रिप्ट की व्याख्या करता हूं sh scriptname
, फ़ाइल निष्पादन योग्य नहीं हो सकती है, ps -e
दिखाता है sh
। मैं इन दो तरीकों को कैसे नाम देता हूं अप्रासंगिक। मेरा मुख्य बिंदु था: व्याख्यात्मक स्क्रिप्ट के भीतर से दुभाषिया को बताना असंभव है, जब तक कि आप इस विशेष दुभाषिया के लिए तैयार न हों। मुझे एक स्क्रिप्ट का पता लगाता है कि दिखाएँ bash
जब साथ चलाने bash
का पता लगाता है python
जब साथ चलाने python
और पता लगाता है bazbaz
जब के साथ चलाने के bazbaz
(एक दुभाषिया आप के बारे में कुछ भी नहीं पता)। पूरा विचार त्रुटिपूर्ण है।
/bin/bash
, यह बैश है। यदि स्क्रिप्ट की व्याख्या की जा रही है (खट्टी), तो आप हमेशा नहीं बता सकते क्योंकि कोई भी कोड जो इसके खिलाफ जांच करता है उसे दुभाषिया के लिए वैध होना चाहिए; और मैं किसी भी दुभाषिया का उपयोग कर सकता हूं, यहां तक कि सबसे पागल भी। तुलना करें: कैसे पता लगाया जाए कि किसी स्क्रिप्ट में खटास आ रही है ।