خطأ “لا يوجد مثل هذا الملف أو الدليل” في لينكس

النقاط الرئيسية

إذا حصلت على خطأ “مترجم سيئ: لا يوجد ملف أو دليل من هذا القبيل” عند تشغيل نص برمجي، فأنت بحاجة إلى تحويل ملف النص البرمجي من نهايات أسطر Windows إلى نهايات أسطر Unix. إحدى الطرق هي استخدام
dos2unix
الأمر، مثل هذا:



هل حاولت تشغيل نص برمجي Bash وظهرت لك رسالة الخطأ “/bin/bash^M: مترجم سيئ: لا يوجد مثل هذا الملف أو الدليل”؟ النتيجة ليست مفيدة للغاية وتعطي انطباعًا بأن النص البرمجي مفقود. لحسن الحظ، هذا ليس هو الحال، والحل بسيط للغاية.


ما هو الخطأ “المترجم السيئ: لا يوجد مثل هذا الملف أو الدليل”؟

الحصول على رسالة خطأ تقول

/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.

يمكنك أيضًا تأكيد المشكلة في محطة طرفية لنظام Linux من خلال الإشارة إلى file الأمر إلى البرنامج النصي الخاص بك.

file script1.sh

التحقق من نهايات أسطر الملف باستخدام الأمر file في Linux.

إذا كان الملف يستخدم نهايات أسطر DOS، فسترى الرسالة “مع نهايات أسطر CRLF” مضافة في الإخراج. إذا كان البرنامج النصي الخاص بنا يستخدم الأسطر الجديدة المناسبة لنظام Unix (LF)، فلن يذكر النهايات على الإطلاق. لحسن الحظ، فإن العودة إلى العمل باستخدام LF أمر سهل.


كيفية إصلاح خطأ “مترجم سيئ: لا يوجد مثل هذا الملف أو الدليل”

كل ما يتطلبه الأمر للتخلص من رسالة الخطأ هذه والبدء في تشغيل البرامج النصية الخاصة بك بشكل طبيعي هو التبديل من نهايات الأسطر في نظام DOS إلى نهايات الأسطر في نظام Unix. يمكنك القيام بذلك باستخدام أوامر المحطة الطرفية أو في محرر التعليمات البرمجية المفضل لديك. فيما يلي ثماني طرق لإصلاح المشكلة:

استخدام الأمر dos2unix

يوجد برنامج سطر أوامر مصمم خصيصًا لتحويل ملفات DOS (المعروف أيضًا باسم Windows) إلى ملفات متوافقة تمامًا مع Unix، ويُطلق عليه اسمًا مناسبًا dos2unixإنه متاح في معظم مستودعات التخزين الافتراضية، لذا يمكنك تثبيته على أوبونتو باستخدام:

sudo apt install dos2unix

على تثبيت فيدورا الخاص بنا dos2unix تم تثبيته مسبقًا، ولكن يمكنك التأكد من حصولك عليه من خلال:

sudo dnf install dos2unix

على Arch Linux:

sudo pacman -S dos2unix

استخدام dos2unix إنه أمر بسيط؛ فقط أعطه اسم ملفك.

dos2unix script1.sh

أدخل الأمر dos2unix.


التحقق من ذلك مع file إذا كنت تريد التأكد من نجاح التحويل قبل تشغيل البرنامج النصي الخاص بك. يمكنك أيضًا التحويل الجماعي عن طريق تسمية ملفات متعددة مفصولة بمسافة فقط.

dos2unix script1.sh script2.sh script3.sh

أو، إذا كان لديك تسمية ملفات متسقة، فيمكنك بالطبع كتابة أوامر أقصر باستخدام أحرف البدل.

dos2unix script*.sh

أدخل الأمر dos2unix.

ال 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 يمكن للأوامر المضمنة في shell الخاص بك أيضًا تغيير نهايات الأسطر الخاصة بملفك.

sed -i 's/\r//' script1.sh

إذا لم تكن على دراية بـ sed بناء الجملة، نحن نقول sed لتحرير ملفنا (-i) واستبدل (s/) كل إرجاع عربة (\r) بدون أي شيء. وهذا يترك لنا خيار يونكس المفضل \n مُنهيات الخط.

استخدام vi أو vim

إذا كنت تستخدم vi أو vim لتحرير البرامج النصية الخاصة بك، فما عليك سوى تمرير هذا الأمر لتحويل الملف المفتوح حاليًا إلى نهايات أسطر Unix.

:set fileformat=unix


تغيير تنسيق ملف البرنامج النصي باستخدام أمر vim.

ذات صلة: كيفية الخروج من محرر Vi أو Vim

استخدام جيني

إذا كنت تعمل في بيئة سطح مكتب، فلا يوجد سبب للتلاعب في المحطة الطرفية فقط لتجهيز ملفاتك لعالم يونكس. تحتوي كل محررات الأكواد وبيئة التطوير المتكاملة تقريبًا على مفتاح تبديل لإنهاء الأسطر. ويشمل ذلك جيني.

لتحويل نهايات الأسطر في Geany، انتقل إلى المستند > تعيين نهايات الأسطر > تحويل وتعيين إلى LF (Unix).

في Geany، ضمن قائمة المستندات، انتقل إلى "تعيين نهايات الخطوط" و اختار "تحويل وتعيين إلى LF (يونكس)".

احفظ البرنامج النصي الخاص بك وحاول تشغيله مرة أخرى.

استخدام كيت أو كرايت

إذا كنت تستخدم كرايتي لتحرير البرنامج النصي الخاص بك، أو برنامج Kwrite الأكثر قوة كيتيمكنك التحويل إلى تنسيق LF بالنقر فوق أدوات > نهاية السطر > Unix.


في Kwrite، افتح قائمة الأدوات "نهاية السطر" وحدد "يونيكس."

احفظ الملف ثم قم بتشغيل البرنامج النصي الخاص بك مرة أخرى.

استخدام Notepad++

إذا قمت بتحرير التعليمات البرمجية في Notepad++، فيمكنك أيضًا تحويل نهايات الأسطر بسهولة، وهو أمر مفيد لأنك من المحتمل أن تقوم بتشغيله على نظام Windows (ما لم تقم بتثبيت Notepad++ لنظام Linux) ويمكنك تحويلها قبل الانتقال إلى نظام Linux الخاص بك. مع فتح الملف، انتقل إلى تحرير > تحويل نهاية العمر > يونكس (LF).

انقر "يحرر" في Notepad++ وما تحته "تحويل نهاية العمر الافتراضي" انقر "يونكس (LF)."

تأكد من حفظ البرنامج النصي الخاص بك قبل تشغيله.


إذا كنت تريد أن يقوم Notepad++ بإنشاء ملفات تحتوي على نهايات أسطر Unix بشكل افتراضي، فانتقل إلى الإعدادات > التفضيلات، وحدد علامة التبويب “مستند جديد”، وتحت خيارات “تنسيق (نهاية السطر)”، انقر فوق زر الاختيار “Unix (LF)”.

في تفضيلات Notepad++، انتقل إلى "وثيقة جديدة" وانقر "يونكس (LF)."

استخدام VS Code

يعمل برنامج Visual Studio Code (VS Code) بنفس الطريقة تقريبًا، إلا أن التبديل أسهل في العثور عليه. ما عليك سوى النقر فوق “CRLF” في الزاوية اليمنى السفلية من نافذة VS Code.

انقر "سي آر إل إف" في أسفل شاشة VS Code.


يمكنك أيضًا تعيين VS Code لاستخدام نهايات أسطر Unix افتراضيًا بالانتقال إلى ملف > تفضيلات > إعدادات وكتابة eol في شريط البحث عن الإعدادات. يجب أن تكون النتيجة الأولى عبارة عن قائمة منسدلة لتعيين “Eol”. قم بتغييرها إلى “\n”.

في إعدادات VS Code، قم بتغيير إعداد EOL الافتراضي.

أضف تعليق