روابط سريعة
النقاط الرئيسية
إذا حصلت على خطأ “مترجم سيئ: لا يوجد ملف أو دليل من هذا القبيل” عند تشغيل نص برمجي، فأنت بحاجة إلى تحويل ملف النص البرمجي من نهايات أسطر 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 من خلال الإشارة إلى file
الأمر إلى البرنامج النصي الخاص بك.
file script1.sh
إذا كان الملف يستخدم نهايات أسطر 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
التحقق من ذلك مع file
إذا كنت تريد التأكد من نجاح التحويل قبل تشغيل البرنامج النصي الخاص بك. يمكنك أيضًا التحويل الجماعي عن طريق تسمية ملفات متعددة مفصولة بمسافة فقط.
dos2unix script1.sh script2.sh script3.sh
أو، إذا كان لديك تسمية ملفات متسقة، فيمكنك بالطبع كتابة أوامر أقصر باستخدام أحرف البدل.
dos2unix script*.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
يمكن للأوامر المضمنة في shell الخاص بك أيضًا تغيير نهايات الأسطر الخاصة بملفك.
sed -i 's/\r//' script1.sh
إذا لم تكن على دراية بـ sed
بناء الجملة، نحن نقول sed
لتحرير ملفنا (-i
) واستبدل (s/
) كل إرجاع عربة (\r
) بدون أي شيء. وهذا يترك لنا خيار يونكس المفضل \n
مُنهيات الخط.
استخدام vi أو vim
إذا كنت تستخدم vi أو vim لتحرير البرامج النصية الخاصة بك، فما عليك سوى تمرير هذا الأمر لتحويل الملف المفتوح حاليًا إلى نهايات أسطر Unix.
:set fileformat=unix
استخدام جيني
إذا كنت تعمل في بيئة سطح مكتب، فلا يوجد سبب للتلاعب في المحطة الطرفية فقط لتجهيز ملفاتك لعالم يونكس. تحتوي كل محررات الأكواد وبيئة التطوير المتكاملة تقريبًا على مفتاح تبديل لإنهاء الأسطر. ويشمل ذلك جيني.
لتحويل نهايات الأسطر في Geany، انتقل إلى المستند > تعيين نهايات الأسطر > تحويل وتعيين إلى LF (Unix).
احفظ البرنامج النصي الخاص بك وحاول تشغيله مرة أخرى.
استخدام كيت أو كرايت
إذا كنت تستخدم كرايتي لتحرير البرنامج النصي الخاص بك، أو برنامج Kwrite الأكثر قوة كيتيمكنك التحويل إلى تنسيق LF بالنقر فوق أدوات > نهاية السطر > Unix.
احفظ الملف ثم قم بتشغيل البرنامج النصي الخاص بك مرة أخرى.
استخدام Notepad++
إذا قمت بتحرير التعليمات البرمجية في Notepad++، فيمكنك أيضًا تحويل نهايات الأسطر بسهولة، وهو أمر مفيد لأنك من المحتمل أن تقوم بتشغيله على نظام Windows (ما لم تقم بتثبيت Notepad++ لنظام Linux) ويمكنك تحويلها قبل الانتقال إلى نظام Linux الخاص بك. مع فتح الملف، انتقل إلى تحرير > تحويل نهاية العمر > يونكس (LF).
تأكد من حفظ البرنامج النصي الخاص بك قبل تشغيله.
إذا كنت تريد أن يقوم Notepad++ بإنشاء ملفات تحتوي على نهايات أسطر Unix بشكل افتراضي، فانتقل إلى الإعدادات > التفضيلات، وحدد علامة التبويب “مستند جديد”، وتحت خيارات “تنسيق (نهاية السطر)”، انقر فوق زر الاختيار “Unix (LF)”.
استخدام VS Code
يعمل برنامج Visual Studio Code (VS Code) بنفس الطريقة تقريبًا، إلا أن التبديل أسهل في العثور عليه. ما عليك سوى النقر فوق “CRLF” في الزاوية اليمنى السفلية من نافذة VS Code.
يمكنك أيضًا تعيين VS Code لاستخدام نهايات أسطر Unix افتراضيًا بالانتقال إلى ملف > تفضيلات > إعدادات وكتابة eol
في شريط البحث عن الإعدادات. يجب أن تكون النتيجة الأولى عبارة عن قائمة منسدلة لتعيين “Eol”. قم بتغييرها إلى “\n”.