2013-06-16 4 views
31

मैं एक sh स्क्रिप्ट मैक पर निम्न त्रुटि चलाने के लिए और प्राप्त करने के लिए कोशिश कर रहा हूँ:हल करने के लिए कैसे "बुरा दुभाषिया: ऐसी कोई फ़ाइल या निर्देशिका"

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

कैसे मैं इसे ठीक कर सकते हैं?

उत्तर

58

perl -i -pe 'y|\r||d' script.pl 
+1

@ Сухой27 क्या आप इसे समझा सकते हैं .. – Bharat

+0

@ भारत यह फ़ाइल के संपादन में जगह करता है, जहां यह '\ r' नियंत्रण char (या '^ एम' के रूप में प्रत्येक घटना को हटा देता है) के रूप में इसे हटाता है। –

38

/usr/bin/perl^एम:

स्क्रिप्ट की शुरुआत में #! लाइन से usr/bin/perl के अंत में ^M निकालें। यह एक नकली ASCII 13 चरित्र है जो खोल को पागल बना रहा है।

यदि आपको चरित्र दिखाई नहीं देता है तो संभवतः आपको फ़ाइल को बाइनरी संपादक के साथ जांचना होगा।

आप इस तरह कर सकता है मैक लाइन न खत्म होने वाली प्रारूप करने के लिए फ़ाइल को रूपांतरित करने:

$ vi your_script.sh 

एक बार vi प्रकार में:

:set ff=unix 

:x 
+1

यह मुझे काम नहीं करता है :( – Fisk

+1

"दुभाषिया को पागल बनाना" सटीक नहीं है। त्रुटि कर्नेल/लोडर से आ रही है क्योंकि यह फ़ाइल नाम के \ r' भाग को समझती है और नहीं मिल पाती वह रास्ता। कोई दुभाषिया कभी लॉन्च नहीं कर रहा है। –

+0

@AndrewMedico: टिप्पणी के लिए धन्यवाद, पूरी तरह से बिंदु पर! मैंने अपना जवाब संपादित किया ... – sergio

5

आपके पास अपनी स्क्रिप्ट में अजीब लाइन अंत है लगता है: ^M एक कैरिज रिटर्न \r है। यूनिक्स लाइन एंडिंग्स पर अपनी स्क्रिप्ट को बदलें (\r\n के बजाय, जो विंडोज सिस्टम पर समाप्त होने वाली रेखा है)।

+0

लेकिन मैक –

+2

पर काम कर रहा हूं ओएस एक्स एक यूनिक्स सिस्टम है। हालांकि, कुछ टूल (एडिटर्स) इंटरऑप के लिए विंडोज लाइन एंडिंग पर सेट हो सकते हैं।जब आप Windows कंप्यूटर से फ़ाइलों को बाइनरी के रूप में स्थानांतरित करते हैं तो आपको खराब लाइन समाप्ति भी मिलती है। क्या आपने खुद स्क्रिप्ट लिखी थी या इसे कहीं से कॉपी किया था? – amon

+0

इसे मेरे सहकर्मी –

2

साथ ^M नियंत्रण वर्ण निकालें एक वैकल्पिक दृष्टिकोण:

sudo ln -s /usr/bin/perl /usr/local/bin/perl`echo -e '\r'` 
+7

मैंने स्थानीय बिल्लियों में से एक को इस जवाब को पढ़ने दिया और उसने एक छत पर भागने के लिए हवा में 20 फीट सीधे ऊपर ले जाया, फिर से उबला, और फिर से उछाल दिया। मुझे यह भी डर है कि, संक्षेप में कि आपका उत्तर मेरे शहर की खुली हवा से उजागर हुआ था, कि लवक्राफ्टियन भयों को इसे दर्ज करने की अनुमति दी जानी चाहिए। बिल्ली को ढूंढ और विच्छेदन करने के बाद मैं आपको और बता दूंगा। –

5

समस्या यह है कि आप लिनक्स/यूनिक्स/OSX मशीन पर DOS/Windows के पाठ स्वरूप का उपयोग करने की कोशिश कर रहे है।

डॉस/विंडोज टेक्स्ट फाइलों में एक लाइन ब्रेक, जिसे न्यूलाइन भी कहा जाता है, दो अक्षरों का संयोजन है: एक कैरिज रिटर्न (सीआर) के बाद लाइन फीड (एलएफ)। यूनिक्स टेक्स्ट फाइलों में एक लाइन ब्रेक एक एकल वर्ण है: लाइन फीड (एलएफ)।

dos2unix उदाहरण में फ़ाइलों की एन्कोडिंग, आप के लिए परिवर्तित कर सकते हैं:

dos2unix yourfile yourfile 

मदद के लिए, चलाएँ: man dos2unix

2

और यदि आप सब्लिमे टेक्स्ट पसंद करते हैं - बस देखें -> लाइन एंडिंग पर जाएं और यूनिक्स जांचें।

संबंधित मुद्दे