استرجاع:كيفية التغلب على عدم التوافق بين ksh على Linux مقابل.التي تم تثبيتها على AIX/Solaris/HPUX؟

StackOverflow https://stackoverflow.com/questions/96133

سؤال

لقد اكتشفت مشكلة أخرى في الجهود التي نبذلها لنقل عدة مئات من نصوص ksh من AIX وSolaris وHPUX إلى Linux.يرى هنا للمشكلة السابقة .

هذا الرمز:

#!/bin/ksh
if [ -a k* ]; then
    echo "Oh yeah!"
else
    echo "No way!"
fi
exit 0

(عند تشغيله في دليل يحتوي على العديد من الملفات التي يبدأ اسمها ب k) ينتج "أوه نعم!" عند استدعائه باستخدام متغيرات AT&T ksh (ksh88 و ksh93).من ناحية أخرى ، فإنه ينتج ورسالة خطأ متبوعة ب "مستحيل!" على متغيرات ksh الأخرى (pdksh و MKS ksh و bash).

مرة أخرى سؤالي هو:

  • هل هناك متغير بيئة من شأنه أن يجعل pdksh يتصرف مثل ksh93؟الإخفاق في ذلك:
  • هل هناك خيار على pdksh للحصول على السلوك المطلوب؟
هل كانت مفيدة؟

المحلول 2

حسنًا، بعد مرور عام واحد، يبدو أنه لا يوجد حل لمشكلتي.

أقوم بإضافة هذه الإجابة لأقول إنني سأضطر إلى التعايش معها ......

نصائح أخرى

لن أستخدم pdksh على Linux بعد الآن.منذ أن أصبحت AT&T ksh مفتوحة المصدر، هناك حزم متاحة من توزيعات Linux المختلفة.على سبيل المثاليتضمن RedHat Enterprise Linux وCentOS ksh93 كحزمة RPM "ksh".

لا يزال pdksh مذكورًا في العديد من وثائق متطلبات التثبيت من بائعي البرامج.لقد استبدلنا pdksh على جميع أنظمة Linux لدينا بـ ksh93 دون أي مشاكل حتى الآن.

في Bash الاختبار - العملية مخصصة لملف واحد.

أعتقد أن الاختبار -a في Ksh88 مخصص لملف واحد، لكنه لا يشتكي لأن كلمات الاختبار الأخرى هي شرط غير محدد لـ -a.

تريد شيئا من هذا القبيل

for K in /etc/rc2.d/K* ; do test -a $K && echo heck-yea ; done

أستطيع أن أقول أن ksh93 يعمل تمامًا مثل bash في هذا الصدد.لسوء الحظ، أعتقد أن الكود قد تمت كتابته بشكل سيئ، وهذا رأيي، ومن المحتمل أن يكون رأيًا سيئًا نظرًا لأن السبب الجذري للمشكلة هو اختبار ksh88 المدمج الذي يسمح بالكود غير المتقن.

أنت تدرك أن [ هو اسم مستعار (غالبًا ما يكون رابطًا أو رمزيًا أو ثابتًا) لـ /usr/bin/test, ، يمين؟لذلك ربما تكون المشكلة الفعلية هي الإصدارات المختلفة من /usr/bin/test ?

OTOH، ksh يتجاوزه مع المدمج.ربما هناك طريقة لجعله لا يفعل ذلك؟أو ربما يمكنك صراحةً استخدام الاسم المستعار [ to /usr/bin/test, ، لو /usr/bin/test على جميع المنصات متوافقة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top