Как настроить Cygwin для использования окончаний файлов DOS?

У меня следующая проблема:

Когда я запускаю сценарий оболочки, который был сохранен с окончаниями строки CR + LF, я получаю следующую ошибку:

myscript.sh: line 1: cd: $'somedir\\someotherdir\r': No such file or directory

Я исследовал проблему, и есть решение для оболочки Cygwin, найденное здесь:

  1. Создайте файл .bashrc
  2. Поместите это внутрь:

    export SHELLOPTS
    set -o igncr
    
  3. Перезагрузить оболочку Cygwin

Однако я использую Cmder и хочу применить это в нем. Но я не знаю как. Как отмечено здесь, Cygwin имел возможность установить использование окончаний файлов DOS по умолчанию во время установки, но избавился от этого (не знаю, почему).

Самое странное, что у меня такие же настройки на моем старом компьютере, тоже Windows 10, и все работает хорошо, даже с окончаниями CRLF...


person Marek Lisý    schedule 06.02.2017    source источник
comment
неправильный вопрос. В cygwin используйте окончания LF, иначе что-то всегда будет ломаться в каком-то пакете.   -  person matzeri    schedule 06.02.2017
comment
Хорошо, но как объяснить, что на старом компьютере все работало?   -  person Marek Lisý    schedule 06.02.2017
comment
Сколько лет вашей установке Cygwin? Опция text/binary была удалена из программы установки в 2013 году.   -  person matzeri    schedule 07.02.2017
comment
Да, возможно, он был старше. У меня нет компьютера под рукой банкомат. Я, однако, вероятно, остановился бы на окончаниях LF. Просто было любопытно, почему раньше работало, а сейчас нет (по какой причине отключили поддержку).   -  person Marek Lisý    schedule 08.02.2017


Ответы (2)


Я столкнулся с той же проблемой при обновлении очень старой версии Cygwin до последней. Всего лишь для нескольких ограниченных вызовов «sed» я явно добавил \r к выходным данным, чтобы некоторые другие нижестоящие инструменты, отличные от cygwin, были довольны.

sed s_(complicated-regex-with-capture)_\1\r_g infile > outfile

Гуру регулярных выражений, вероятно, мог бы улучшить этот подход, чтобы дополнительно захватывать и выдавать «\ r», только если он найден в данных.

sed s_(capture1)(capture\r-or-empty:\r*)$_\1\2_g infile > outfile
person englebart    schedule 19.05.2020

Вы также можете использовать dos2unix, который можно установить вместе с Cygwin.

person eorojas    schedule 06.07.2021