سؤال

نحتاج إلى دعم تطبيق قديم يوفر منفذ 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, ، ويترك الباقي وحده.

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