cygwin: pdksh (5.2.14-3) не поддерживает обратную косую черту (\) - PullRequest
0 голосов
/ 24 августа 2010

в качестве замены ksh в cygwin, pdksh может быть единственным выбором. но похоже, что в cygwin есть ошибка: pdksh (5.2.14-3) для поддержки обратного слеша (\).

проглотит \:

$ cd .\access
pdksh: cd: /cygdrive/e/.access - No such file or directory

После поиска в интернете, та же проблема решена для другой платформы. но не знаю, как решить это для Cygwin.

Ответы [ 4 ]

1 голос
/ 26 августа 2010

Pdksh, как и все программы Cygwin, поддерживает обратную косую черту как разделитель каталогов.Но вы должны правильно их процитировать.Запуск сценариев оболочки под Cygwin действительно учит вас правильно заключать в кавычки, в частности, всегда помещать подстановки переменных в двойные кавычки и не использовать небрежно эхо (printf "%s" "$x" переносимо и надежно: в отличие от echo, естьнет риска, что это может сделать расширение с обратной косой чертой).

Обратите внимание, что совместимость pdksh даже с ksh88 далека от совершенства, поэтому некоторые сценарии могут давать сбой по другим причинам (например, полагаясь на код состояния writer | reader, который заключается в том, чтоreader, что имеет место в истинном ksh, но не в pdksh).Cygwin включает zsh, который после запуска emulate ksh в основном совместим с ksh88 (хотя все еще не совершенен).

Существуют не-Cygwin порты ksh для Windows, включая Interix SFU SUA и собственный порт ATT .

0 голосов
/ 23 декабря 2011

Вот обходной путь для проблемы.Начните использовать bash и внесите следующие изменения в конфигурационные файлы.

  • Откройте ~ / .bashrc
  • Добавьте следующий код в конце

    wcd() 
    {  
        cd $(echo "$@" | sed 's/\\/\\\\/g')   
    }
    
  • Сохраните его

  • Перезагрузите терминал bash.
  • Введите

    wcd ".\access" 
    

    вместе с цитатами и вуаля, у васВаша собственная команда совместимости с Windows.

0 голосов
/ 24 августа 2010

Из Руководства пользователя Cygwin :

Примечание

Использование путей Win32, хотя и возможно, не рекомендуется, поскольку оно обходит важную обработку внутренних путеймеханизмы.См. раздел «Использование собственных путей Win32» и раздел «Использование файлового API Win32 в приложениях Cygwin» для получения дополнительной информации.

Тамэто утилита с именем cygpath, предназначенная для использования в сценариях оболочки, которые преобразуют каждый путь между путями Win32 и POSIX.

0 голосов
/ 24 августа 2010

Вы должны использовать прямые косые черты, или удваивать все обратные косые черты, или ставить в кавычки каждую строку, которая может быть именем пути. К сожалению, нет никакого способа обойти это. Это общая проблема при попытке использовать оболочки Unix, для которых \ является escape-символом, в Windows.

...