मेरे पास निम्नलिखित बैश स्क्रिप्ट है
#!/bin/bash
for i in 4 5 6; do
echo $i
done
जब मैं स्क्रिप्ट चलाता हूं तो यह ठीक काम करता है:
$ ./testbash
4
5
6
जब मैं एक ही स्क्रिप्ट का स्रोत करता हूं तो मुझे निम्न वाक्यविन्यास त्रुटि मिलती है
$ source testbash
bash: /home/nick/bin/testbash: line 5: syntax error: unexpected end of file
क्या बैश फ़ाइल को सोर्स करते समय कुछ आदेश अस्वीकृत हैं? मैं जीएनयू बैश, संस्करण 4.1.2 का उपयोग कर रहा हूं
यहां लिपि का हेक्सडम्प है
$ hexdump -C testbash
00000000 23 21 2f 62 69 6e 2f 62 61 73 68 0a 66 6f 72 20 |#!/bin/bash.for |
00000010 69 20 69 6e 20 34 20 35 20 36 3b 20 64 6f 0a 20 |i in 4 5 6; do. |
00000020 20 65 63 68 6f 20 24 69 0a 64 6f 6e 65 0a | echo $i.done.|
0000002e
उत्तर:
उत्तर № 1 के लिए 1सोर्सिंग और निष्पादन के कई कारण बताए जाने के कई कारण हैं, लेकिन बहुत कम क्यों आपको एक नया बैश वाक्यविन्यास त्रुटि मिलेगी।
रन env -i bash --norc
एक साफ खोल प्राप्त करने के लिए ताकि आप जांच सकें कि यह आपके वर्तमान खोल से संबंधित है या नहीं।
यदि इस साफ खोल में सोर्सिंग ठीक काम करता है, तो निम्न आदेशों के आउटपुट की तुलना उस खोल के साथ करें जहां यह विफल हो जाता है:
alias
(यदि आप कीवर्ड को प्रतिस्थापित या पेश करते हैंdone
)shopt
(यदि आप वाक्यविन्यास बदलते विकल्पों को संशोधित करते हैंextglob
)echo $BASH_VERSION
(यदि आपकी इंटरैक्टिव आरसी फाइलें निष्पादित होती हैं तो "एक अलग खोल में)