У меня несколько проблем с обслуживанием больших производственных серверов, на которых некоторые разработчики сбрасывают файлы из сред Windows, иногда с байтами спецификации (мы используем UTF8, и в этом нет необходимости), что вызывает множество проблем.
В других случаях, когда vim редактировал файлы прямо на сервере, я получал метки «без конца строки» и «[DOS]».
Недавно я обнаружил, как найти байт бомбы и как удалить его в пакетном скрипте. А как насчет незаконных байтов, плохих EOL? Безопасно ли использовать текстовые файлы DOS в среде Linux? Есть ли недостатки, если я использую для их преобразования с помощью команды dos2unix?
С уважением
«Плохой EOL» (no end of line
сообщение) неплохо. Он просто уведомляет вас, что после последней строки нет EOL. Соглашение Unix заключается в использовании EOL в качестве символа конца строки, а большинство инструментов Windows считают его разделителем.
Помимо сообщения (и легкого раздражения, когда cat
ing такой файл) ничего плохого в этом нет.
Окончания строк DOS / Windows (CR / LF) могут вызвать некоторые проблемы, особенно в сценариях: когда Linux читает #!
строка, он будет использовать все до первого LF и будет учитывать CR часть имени файла интерпретатора.
Для исполняемых скриптов лучше всего использовать окончания строк Unix (:set ff=unix
), иначе Linux попытается выполнить /usr/bin/perl
<CR>
когда у тебя было #!/usr/bin/perl
вместе с окончаниями строк Windows.
Для других файлов это не имеет большого значения.
Подпись UTF-8 (EF BB BF) может вызвать еще больше проблем - отключите с помощью :set nobomb
, массовое удаление с помощью sed -i 's/^\xef\xbb\xbf//'
.
EOL: Символ или символы конца строки; либо LF, либо CR / LF, в зависимости от того, что подходит.
Ага, байты спецификации плохие. Языковой стандарт должен определять кодировку файла.
Другая вещь, как вы правильно отметили, - это окончания строк. Dos имеет тенденцию быть CRLF, а Linux - только LF.
dos2unix позаботится об этой проблеме за вас.