একটি .sh ফাইল: / বিন / বাশ ^ এম: খারাপ দোভাষী দান করতে সক্ষম নন


107

আমি একটি শেল স্ক্রিপ্ট কার্যকর করতে চেয়েছিলাম:

-rwxr-x--x 1 root root   17234 Jun  6 18:31 create_mgw_3shelf_6xIPNI1P.sh

আমি একটি স্ট্যান্ডার্ড পদ্ধতি করার চেষ্টা করেছি, তবে আমি এই ত্রুটি পেয়েছি:

./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0 
DEBUG   cd/etc/opt/ldapfiles/ldif_in ;
./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
**ERROR  sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory**

এর মানে কী? আমি গ্রুপের rootঅধীনে ব্যবহারকারী হিসাবে এটি করছিলাম root

এর অর্থ কি এই যে rootব্যবহারকারীর জন্য ফাইলটির সঠিক অনুমতি নেই ?

উত্তর:


182

এটি কোনও অনুমতি সংক্রান্ত সমস্যা নয়, আপনি অনুমতি সম্পর্কে কোনও বার্তা পাচ্ছেন না

/bin/bash^M: bad interpreter: No such file or directory

স্ক্রিপ্টটি নির্দেশ করে যে এটি অবশ্যই অবস্থিত শেল দ্বারা সম্পাদন করা উচিত /bin/bash^M। এ জাতীয় কোনও ফাইল নেই: এটি বলা হয় /bin/bash

^Mএকটি হল গাড়ি ফেরত চরিত্র । লিনাক্স একটি লাইনের শেষ চিহ্নিত করতে লাইন ফিড অক্ষর ব্যবহার করে , যেখানে উইন্ডোজ দ্বি-চরিত্রের ক্রম সিআর এলএফ ব্যবহার করে। আপনার ফাইলে উইন্ডোজ লাইনের সমাপ্তি রয়েছে যা লিনাক্সকে বিভ্রান্ত করছে।

উদ্দীপনা সিআর অক্ষর সরান। আপনি নিম্নলিখিত কমান্ড দিয়ে এটি করতে পারেন:

sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh

22
অথবা dos2unixপ্রোগ্রামটি ইনস্টল এবং ব্যবহার করুন ।
আর্জেণ্টপিপার

4
এর জন্য আপনাকে ধন্যবাদ, আমি এখনও পর্যন্ত খুঁজে পাওয়া অন্যান্য সমস্ত উত্তরগুলি সাহায্য করেনি। এই এক এটা করেছে!
কডেনিনজা

উইন্ডোজ হতে হবে না, ওএস এক্স থেকে উবুন্টুতে একটি স্ক্রিপ্ট অনুলিপি করার পরে আমি একই অনুরূপ বার্তা পেয়েছি ... ডস 2 ইউনিক্স সে ক্ষেত্রে দুর্দান্ত কাজ করেছে, যেখানে '\ r' কে কোনও কিছুর বদলে আরও খারাপ করা হবে, কারণ সেখানে '\' নেই ফাইলের n 'টি অক্ষর।
মাইকেল

1
@ মিশেল ম্যাকোস ব্যবহার করেছে \nকারণ এটি ইউনিক্স। স্ক্রিপ্টটি সম্ভবত কোনও পূর্ববর্তী ম্যাক ওএস সংস্করণ থেকে ছিল? আপনি sed -i -e 's/\r$/\n/' script.shযে ক্ষেত্রে চালাতে পারে ।
wjandrea

1
এটি
জিডিট-

23

ভিমে আপনি :set ff=unixফাইলটি সংরক্ষণ করতে পারেন এবং তারপরে ফাইলটি সংরক্ষণ করতে বা :set ff=dosআবার ডস ফর্ম্যাটিং পেতে পারেন।


এইটি আমার জন্য এটি করেছে, thx
বাংকারডাইভ

19

আপনার ফাইলটিতে ডস / উইন্ডোজ স্টাইলের লাইন এন্ডিংস রয়েছে (সিআর এলএফ) , তবে ইউনিক্সের মতো সিস্টেমে কেবল এলএফ নিয়ন্ত্রণ চরিত্রটি লাইন ব্রেক হিসাবে ব্যবহৃত হয়।

অতিরিক্ত সিআর নিয়ন্ত্রণ চরিত্রটি^M আপনার আউটপুট হিসাবে এনকোডযুক্ত দেখানো হয়েছে । আপনি দৌড়ানোর সময় এটি দেখতেও পাবেন cat -A create_mgw_3shelf_6xIPNI1P.sh

ডস / উইন্ডোজ স্টাইল থেকে ডিক্স / উইন্ডোজ স্টাইল থেকে ইউনিক্স স্টাইলে রূপান্তর করতে, একটি সরঞ্জাম বলা হয়েছে dos2unix। আপনি এটি ব্যবহার করে এটি ইনস্টল করুন:

sudo apt-get install dos2unix

তারপরে আপনি উভয়ভাবেই ফাইলের লাইন এন্ডিংগুলি সহজেই রূপান্তর করতে পারেন

dos2unix FILENAME
unix2dos FILENAME

আপনার ক্ষেত্রে, কেবল নীচে এই কমান্ডটি চালান এবং স্ক্রিপ্ট ফাইলটি জায়গায় স্থানান্তরিত হবে:

dos2unix create_mgw_3shelf_6xIPNI1P.sh

এর পরে বাশের ফাইলটি সঠিকভাবে ব্যাখ্যা করতে সক্ষম হওয়া উচিত।


1
ধন্যবাদ, ডুস 2 ইউনিক্স মদৃশতার মাধ্যমে ম্যাকওএসের জন্য উপলব্ধ।
মুহাম্মদ আনাক্বীব

5

আপনি ডসের সাথে সম্পাদনা করতে সমস্যা হচ্ছেন না!

vi দিয়ে আপনার ফাইলটি খুলুন এবং এর সাথে ইউনিক্স সেট করুন:

:set ff=unix
:wq

এবং সব ঠিক আছে


4

কি vi <your script>

তারপর :set list; এটি আপনার স্ক্রিপ্টের কোনও বিশেষ অক্ষর প্রদর্শন করবে।

তারপরে অক্ষরটি প্রতিস্থাপন করুন:

:%s/^M//gc [টাইপ করতে ^Mপ্রেস Ctrl+ + v+ + m]


উত্তর উপরে দেখুন ব্যবহার সম্পর্কে: fileformat যা এই প্রোগ্রামটিতে এছাড়াও বিশ্বব্যাপী প্রতিকল্পন চেয়ে পরিচালনা করার জন্য ভাল, দেখতে stackoverflow.com/questions/14609779/... কিভাবে হ্যান্ডেল করতে উপর ধারনা জন্য স্বয়ংক্রিয়ভাবে
qneill

4

অন্যান্য উত্তরে বর্ণিত হিসাবে এটি একটি ফর্ম্যাট সমস্যা issue সুতরাং, উত্তরটি হ'ল বিন্যাসটি ডস থেকে ইউনিক্স স্টাইল লাইনের শেষে পরিবর্তন করা। এটি 'ফাইলের জায়গায়' ঠিক করার আরও একটি সহজ উপায় is

fromdos file

এটি প্যাকেজে উপলব্ধ tofrodos:

sudo apt-get install tofrodos

2

অযাচিত অক্ষরগুলি সরাতে আপনি জিডিটও ব্যবহার করতে পারেন। ফাইল মেনু এর নীচে সেভ হিসাবে নির্বাচন করুন এবং লাইন এন্ড টাইপ ইউনিক্স / লিনাক্স সেট করুন।


এটির জন্য +1 কারণ এটি আমাকে MacOS লাইন সমাপ্তিতে সহায়তা করেছিল।
ববলে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.