আপনার স্ক্রিপ্টগুলিতে সম্ভবত ডস-স্টাইলের সিআর-এলএফ লাইন শেষ হতে পারে এবং ইউনিক্স-স্টাইলের এলএফ লাইনের শেষ নেই। প্রথম ক্ষেত্রে ত্রুটির বার্তায় দেখা গেছে যে এম এমটি ইঙ্গিত দেয় যে 0 ডি বর্ণটি স্ক্রিপ্ট ইন্টারপ্রেটার নামের অংশ হিসাবে ব্যাখ্যা করা হয়েছিল এবং লাইনের সমাপ্তির অংশ হিসাবে নয় (যেমনটি এটি প্রত্যাশা করতে পারে)। যেহেতু 0D (0 M) অক্ষরটি অন্তর্ভুক্ত করে এমন কোনও পাথ আপনার সিস্টেমে কোনও এক্সিকিউটেবল ফাইল নেই তাই সিস্টেমটি দোভাষীকে ডাকতে সক্ষম হয় না। আপনি যখন ম্যানুয়ালি আপনার ইন্টারপ্রেটারকে কল করবেন তখন এটি স্ক্রিপ্টে উপস্থিত উভয় ধরণের লাইন শেষগুলি পরিচালনা করতে সক্ষম হয়।
আপনি যদি স্ক্রিপ্টগুলিকে ইউনিক্স-স্টাইলের এলএফ লাইন এন্ডিং ব্যবহার করতে রূপান্তর করেন তবে আপনার শিবাংকে কাজ করা উচিত। একটি উদাহরণ জন্য পড়ুন।
নীচের অধিবেশনে, টোডস এবং থোডসগুলি ইউটিলিটি (প্যাকেজ হিসাবে উবুন্টুতে উপলভ্য tofrodos
) সিআর-এলএফ থেকে এলএফ-তে রূপান্তর করার জন্য লাইন-এন্ডিং কনভেনশনগুলি রূপান্তরিত করে। যে কোনও সমমানের ইউটিলিটি ( এই ইউনিক্স.এসই প্রশ্নটি দেখুন ) প্রদর্শনের উদ্দেশ্যে করবে।
নিম্নলিখিত অধিবেশন ট্রান্সক্রিপ্ট (আপনার একই স্ক্রিপ্ট ফাইলগুলি দিয়ে সম্পাদিত) পরিস্থিতি স্পষ্ট করে:
$ fromdos hello.sh
$ ./hello.sh
Hello
$ todos hello.sh
$ ./hello.sh
bash: ./hello.sh: /bin/sh^M: bad interpreter: No such file or directory
$
$ fromdos hello.py
$ ./hello.py
Hello
$ todos hello.py
$ ./hello.py
: No such file or directory
$
দেখে মনে হচ্ছে এটি কর্নেল যা শেবাং লাইনটি পড়ে, এবং সম্ভবত লিনাক্স কার্নেল (কমপক্ষে আমার কুবুন্টু স্যাসি সিস্টেমের সংস্করণ হিসাবে) সিআর-এলএফ লাইনের সমাপ্তি সম্মেলনের অংশ হিসাবে সিআরকে স্বীকৃতি দেয় না।
যদি আপনার স্ক্রিপ্টের শেবাং কাজ করছে বলে মনে হয় না (যেমন স্ক্রিপ্টে দোভাষীকে ম্যানুয়ালি কল করে কাজ করে তবে আপনি স্ক্রিপ্টটির ফাইলের নাম ব্যবহার করে এটি সম্পাদন করতে পারবেন না যদিও আপনি chmod +x
এটি করেছেন) তবে এটি একটি সম্ভাব্য কারণ।
দ্রষ্টব্য:
অন্যরা যারা মন্তব্য করেছেন তাদেরও ধন্যবাদ। আরও ভাল উত্তর থাকলে আমি শুনে খুশী হই!