كورن شيل لنظام التشغيل Windows 7؟
سؤال
نحتاج إلى دعم تطبيق قديم يوفر منفذ UNIX ومنفذ Win32. لسوء الحظ ، في وقت لاحق من اللعبة ، تمت كتابة الكثير من كود الغراء في برنامج KSH Scripts لمنفذ UNIX فقط ، وفقد منفذ Win32 التكافؤ. لقد كنت أحاول إحياءها ، وكنت أحاول بعض حلول KSH-For-Windows (بناء أصلي لـ Zsh المستخدم للعمل في الماضي) ، ولكن لا شيء يبدو أنه يعمل بشكل صحيح في ظل Windows 7: Cygwin يرفض استخدامه كل من مسارات Win32 و Unix على غرار ، لذلك تنكسر بعض البرامج النصية المعقدة. نفس الموقف لـ SUA/SFU. لا تعمل UWIN على Windows 7. لم تعد المنافذ الأصلية القديمة التي استخدمتها (Winzsh) تعمل أيضًا تحت سن 7.
لذلك ، أنا في حاجة إلى عمل شبيه من كورن سيعمل تحت فوز 7 (64 بت ستكون رائعة ، لكنني فقدت الأمل) والتي يمكن أن تعمل مع كل من مسارات CMD.exe (C:/ المسار/إلى/التطبيق) ومسارات UNIX القياسية (/path/to/app). أي أدلة؟
المحلول
يدعم Cygwin مسارات نمط C:/to/App ، على الرغم من أنها تحب الشكوى عنها. (تعيين cygwin = nodosfileWarning سيغلقها). حتى المسارات ذات الرفع الخلفي مدعوم ، لكنها تحتاج إلى اقتباس مناسب لمنع القشرة من تفسيرها.
يمكن تثبيت PDKSH ، "المجال العام Korn Shell" ، من خلال Cygwin's Setup.exe.
نصائح أخرى
حلت Cygwin لحسن الحظ استبدال PDKSH (ميت منذ عام 1999) مع MKSH. ومع ذلك ، MKSH إرادة * لا تدعم مسارات غير بوسكس ، لأنها في المقام الأول قذيفة BSD UNIX ، وأحد نقاط قوتها تعمل على نفس المنوال.
أن هناك ، هناك dos2unixpath
و unix2dospath
(IIRC) في interix. ربما يمكنك استخدامها.
شيء من هذا القبيل قد يعمل:
function dos2unixpath {
local _x=$1
[[ $_x = [A-Za-z]:[\\/]* ]] && _x=/dev/fs/${_x::1}/${_x:3}
print -r -- "${_x//\\//}"
}
هذا يتحول x:\foo\bar
إلى /dev/fs/x/foo/bar
, ..\bla
إلى ../bla
, ، ويترك الباقي وحده.