इस तरह का संदेश आमतौर पर एक फर्जी शेबंग लाइन के कारण होता है, या तो पहली पंक्ति के अंत में एक अतिरिक्त गाड़ी वापस आती है या इसकी शुरुआत में एक बीओएम।
Daud:
$ head -1 yourscript | od -c
और देखें कि यह कैसे समाप्त होता है।
ये गलत है:
0000000 # ! / b i n / b a s h \r \n
यह भी गलत है:
0000000 357 273 277 # ! / b i n / b a s h \n
यह सही है:
0000000 # ! / b i n / b a s h \n
का प्रयोग करें dos2unix
(या sed
, tr
, awk
, perl
, python
...) अपनी स्क्रिप्ट ठीक करने के लिए अगर यह समस्या है।
यहाँ एक BOM और सिलाई CRs दोनों को हटा दिया जाएगा:
sed -i '1s/^.*#//;s/\r$//' brokenScript
ध्यान दें कि स्क्रिप्ट को चलाने के लिए आप जिस शेल का उपयोग कर रहे हैं, वह प्रदर्शित होने वाले त्रुटि संदेशों को थोड़ा प्रभावित करेगा।
यहाँ तीन लिपियों को केवल अपना नाम दिखाया गया है ( echo $0
) और निम्नलिखित संबंधित शबंग रेखाएँ हैं:
correctScript:
0000000 # ! / b i n / b a s h \n
scriptWithBom:
0000000 357 273 277 # ! / b i n / b a s h \n
scriptWithCRLF:
0000000 # ! / b i n / b a s h \r \n
बैश के तहत, उन्हें चलाने से ये संदेश दिखाई देंगे:
$ ./correctScript
./correctScript
$ ./scriptWithCRLF
bash: ./scriptWithCRLF: /bin/bash^M: bad interpreter: No such file or directory
$ ./scriptWithBom
./scriptWithBom: line 1: #!/bin/bash: No such file or directory
./scriptWithBom
किसी दुभाषिये को बुलाकर फर्जी तरीके से चलाना CRLF स्क्रिप्ट को बिना किसी समस्या के चलाने की अनुमति देता है:
$ bash ./scriptWithCRLF
./scriptWithCRLF
$ bash ./scriptWithBom
./scriptWithBom: line 1: #!/bin/bash: No such file or directory
./scriptWithBom
इस प्रकार देखा गया व्यवहार ksh
निम्न है:
$ ./scriptWithCRLF
ksh: ./scriptWithCRLF: not found [No such file or directory]
$ ./scriptWithBom
./scriptWithBom[1]: #!/bin/bash: not found [No such file or directory]
./scriptWithBom
और इसके साथ dash
:
$ ./scriptWithCRLF
dash: 2: ./scriptWithCRLF: not found
$ ./scriptWithBom
./scriptWithBom: 1: ./scriptWithBom: #!/bin/bash: not found
./scriptWithBom