এই ধরণের বার্তাটি সাধারণত বোগাস শেবাং লাইনের কারণে হয়, হয় প্রথম লাইনের শেষে অতিরিক্ত গাড়ি ফিরে আসে বা এর শুরুতে একটি বিওএম হয়।
চালান:
$ 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
...) আপনার স্ক্রিপ্টটি ঠিক করতে হলে এই সমস্যা।
এখানে একটি যা বিওএম এবং টেইলিং সিআর উভয়কেই সরিয়ে ফেলবে:
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
স্পষ্টতভাবে দোভাষীকে কল করে বগাসগুলি চালানো সিআরএলএফ স্ক্রিপ্টকে কোনও সমস্যা ছাড়াই চলতে দেয়:
$ 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