/ / लूप स्क्रिप्ट लूप ठीक चलाता है लेकिन स्रोत के साथ चलने पर वाक्यविन्यास त्रुटि देता है - लिनक्स, बैश, फॉर-लूप

पाश के लिए मार स्क्रिप्ट ठीक चलाता है, लेकिन वाक्यविंयास त्रुटि देता है जब स्रोत के साथ चला-लिनक्स, मार, के लिए पाश

मेरे पास निम्नलिखित बैश स्क्रिप्ट है

#!/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 एक साफ खोल प्राप्त करने के लिए ताकि आप जांच सकें कि यह आपके वर्तमान खोल से संबंधित है या नहीं।

यदि इस साफ खोल में सोर्सिंग ठीक काम करता है, तो निम्न आदेशों के आउटपुट की तुलना उस खोल के साथ करें जहां यह विफल हो जाता है:

  1. alias (यदि आप कीवर्ड को प्रतिस्थापित या पेश करते हैं done)
  2. shopt (यदि आप वाक्यविन्यास बदलते विकल्पों को संशोधित करते हैं extglob)
  3. echo $BASH_VERSION (यदि आपकी इंटरैक्टिव आरसी फाइलें निष्पादित होती हैं तो "एक अलग खोल में)