إصلاح: خطأ "مترجم غير صالح: لا يوجد مثل هذا الملف أو الدليل" في Linux
نشرت: 2023-05-01dos2unix
، مثل هذا:dos2unix script1.sh
هل حاولت تشغيل برنامج نصي Bash وحصلت على رسالة الخطأ "/ bin / bash ^ M: مترجم غير صالح: لا يوجد ملف أو دليل"؟ الإخراج ليس مفيدًا جدًا ويعطي الانطباع بأن النص الخاص بك مفقود. لحسن الحظ ، ليس هذا هو الحال ، والإصلاح بسيط للغاية.
ما هو خطأ "المترجم السيئ: لا يوجد مثل هذا الملف أو الدليل"؟
كيفية إصلاح خطأ "مترجم غير صالح: لا يوجد مثل هذا الملف أو الدليل"
باستخدام الأمر dos2unix
باستخدام الأمر tr
استخدام الأمر sed
باستخدام vi أو vim
باستخدام جيني
باستخدام Kate أو Kwrite
باستخدام برنامج Notepad ++
باستخدام كود VS
ما هو خطأ "المترجم السيئ: لا يوجد مثل هذا الملف أو الدليل"؟
الحصول على رسالة خطأ تقرأ /bin/bash^M: bad interpreter: No such file or directory
يعني فقط أن ملف البرنامج النصي شل الخاص بك يحتوي على نهايات سطر خاطئة - الأحرف الموضوعة في نهاية السطر تشير إلى أن الوقت قد حان للانتقال إلى السطر التالي. يحب Windows المنحدر من DOS مشاهدة "حرف إرجاع وتغذية السطر" (CRLF) ، تم تدوينه \r\n
. في المقابل ، يستخدم Linux و macOS الحديث والأنظمة الأخرى المستندة إلى Unix فقط "تغذية خطية" (LF) أو \n
.
إذا كنت ترى خطأ المترجم السيئ هذا ، فمن المحتمل أن تكون أنت أو الشخص الذي حصلت على النص منه قد كتبته في الأصل على جهاز كمبيوتر يعمل بنظام Windows. يرى Bash نهايات الأسطر هذه \r\n
التي تم تعيينها بواسطة كمبيوتر Windows وينزعج لأنها تمنع shell من تفسير البرنامج النصي الخاص بك بشكل صحيح.
يمكنك حتى تأكيد المشكلة في محطة Linux بتوجيه أمر file
إلى البرنامج النصي الخاص بك.
ملف script1.sh
إذا كان الملف يستخدم نهايات سطر DOS ، فسترى الرسالة "with CRLF line terminators" ملحقة بالمخرجات. لو كان نصنا يستخدم الأسطر الجديدة المناسبة لـ Unix (LF) ، فلن يذكر المصطلحين على الإطلاق. لحسن الحظ ، فإن العودة إلى أعمال LF أمر سهل.
كيفية إصلاح خطأ "مترجم غير صالح: لا يوجد مثل هذا الملف أو الدليل"
كل ما يتطلبه الأمر للتخلص من رسالة الخطأ هذه والبدء في تشغيل البرامج النصية الخاصة بك كالمعتاد هو التبديل من نهايات سطر DOS إلى نهايات سطر Unix. يمكنك القيام بذلك باستخدام أوامر المحطة أو في محرر الكود المفضل لديك. فيما يلي ثماني طرق لإصلاحها:
باستخدام الأمر dos2unix
يوجد برنامج سطر أوامر مصمم فقط لتحويل ملفات DOS (المعروفة أيضًا باسم Windows) إلى ملفات متوافقة تمامًا مع Unix تسمى dos2unix
. إنه متوفر في معظم المستودعات الافتراضية ، لذا يمكنك تثبيته على Ubuntu باستخدام:
sudo مناسب لتثبيت dos2unix
في تثبيت Fedora الخاص بنا ، تم تثبيت dos2unix
مسبقًا ، ولكن يمكنك تأكيد أنه لديك من خلال:
sudo dnf تثبيت dos2unix
على Arch Linux:
sudo pacman -S dos2unix
استخدام dos2unix
بسيط ؛ فقط أعطه اسم الملف الخاص بك.
dos2unix script1.sh
تحقق منه file
إذا كنت تريد التأكد من نجاح التحويل قبل تشغيل البرنامج النصي. يمكنك أيضًا التحويل الجماعي عن طريق تسمية ملفات متعددة مفصولة بمسافة فقط.
dos2unix script1.sh script2.sh script3.sh
أو ، إذا كان لديك تسمية ملفات متسقة ، فيمكنك بالطبع كتابة أوامر أقصر باستخدام أحرف البدل.
البرنامج النصي dos2unix * .sh
يحتوي الأمر dos2unix
على العديد من العلامات لمساعدتك في إجراء أنواع خاصة من التحويلات ، مثل تغيير ملكية الملف. يمكنك حتى استخدامه في شكل عكسي ، unix2dos
، إذا كنت تريد الرجوع إلى CRLF. أدخل dos2unix --help
لمعرفة المزيد.
باستخدام الأمر tr
إذا كنت لا تستطيع أو لا ترغب في تثبيت أداة مساعدة مخصصة ، فإن Linux لديه أدوات مدمجة لتنظيف تلك الخطوط الجديدة. باستخدام الأمر tr
، يمكنك نزع \r
جزء من نهايات السطر بحيث يتبقى لدينا \n
نهايات.
tr -d '\ r' <script1.sh> script1_unix.sh
هنا ، يأخذ tr
نص ملف script1.sh
، ويحذف كل مثيل \r
يعثر عليه ، ويحفظ الإخراج كملف script1_unix.sh
.
استخدام الأمر sed
يمكن لأمر sed
القوي المضمن في غلافك أيضًا تغيير نهايات السطر لملفك.
sed -i 's / \ r //' script1.sh
إذا لم تكن معتادًا على بناء جملة sed
، فنحن نقول لـ sed
تعديل ملفنا ( -i
) واستبدال ( s/
) كل حرف إرجاع ( \r
) بلا شيء. هذا يتركنا مع أدوات إنهاء الأسطر المفضلة \n
في Unix.
باستخدام vi أو vim
إذا كنت تستخدم vi أو vim لتحرير البرامج النصية الخاصة بك ، فما عليك سوى تمرير هذا الأمر لتحويل الملف المفتوح حاليًا إلى نهايات سطر Unix.
: set fileformat = unix
ذات صلة: كيفية الخروج من محرر Vi أو Vim
باستخدام جيني
إذا كنت تعمل في بيئة سطح مكتب ، فلا داعي للخداع في الجهاز لمجرد جعل ملفاتك جاهزة لعالم Unix. في الواقع ، يحتوي كل محرر رمز و IDE على مفتاح تبديل لنهايات الأسطر. يتضمن ذلك جيني.
لتحويل نهايات الأسطر في Geany ، انتقل إلى Document> Set Line Endings> Convert and Set to LF (Unix).
احفظ البرنامج النصي وحاول تشغيله مرة أخرى.
باستخدام Kate أو Kwrite
إذا كنت تستخدم Kwrite لتحرير النص الخاص بك ، أو Kate ابنة Kwrite الأكثر قوة ، فيمكنك التحويل إلى تنسيق LF بالنقر فوق Tools> End of Line> Unix.
احفظ الملف وقم بتشغيل البرنامج النصي الخاص بك مرة أخرى.
باستخدام برنامج Notepad ++
إذا قمت بتحرير التعليمات البرمجية في Notepad ++ ، فيمكنك أيضًا تحويل نهايات الأسطر بسهولة ، وهو أمر سهل الاستخدام لأنك على الأرجح تقوم بتشغيله على Windows (ما لم تكن قد قمت بتثبيت Notepad ++ لنظام التشغيل Linux) ويمكنك تحويلها قبل الانتقال إلى نظام Linux الخاص بك. بعد فتح الملف ، انتقل إلى تحرير> تحويل EOL> Unix (LF).
تأكد من حفظ البرنامج النصي الخاص بك قبل تشغيله.
إذا كنت تريد أن يقوم برنامج Notepad ++ بإنشاء ملفات بنهايات سطر Unix افتراضيًا ، فانتقل إلى الإعدادات> التفضيلات ، وحدد علامة التبويب "مستند جديد" ، وضمن خيارات "التنسيق (نهاية السطر)" انقر فوق زر الاختيار "Unix (LF)".
باستخدام كود VS
يعمل Visual Studio Code (VS Code) بنفس الطريقة إلى حد كبير ، إلا أنه من الأسهل العثور على مفتاح التبديل فقط. فقط انقر فوق "CRLF" في الركن الأيمن السفلي من نافذة VS Code.
يمكنك أيضًا تعيين VS Code لاستخدام نهايات سطر Unix افتراضيًا بالانتقال إلى ملف> تفضيلات> إعدادات وكتابة eol
في شريط بحث الإعدادات. يجب أن تكون أعلى نتيجة قائمة منسدلة لإعداد "Eol". قم بتغييره إلى "\ n".
ذات صلة: كيفية جعل أجهزة Bash Scripts مدركة