Есть ли в Linux проблемы с новыми строками CRLF?

У вас есть специальные функции ядра для управления таймерами, и в вашем случае тайм-ауты вы должны проверить в функциях mod _timer, setup _timer и del _timer.

0
20.08.2021, 04:04
3 ответа

В большинстве случаев ядро ​​Linux само не знает или не заботится об окончании строк, когда вы загружаете файлы на сервер. Хотя, как отмечает муру, CRLF испортит шебанг .

Однако в Linux существует соглашение о том, что все строки в текстовых файлах заканчиваются одним LF. Многие инструменты читают CR и обрабатывают его как любой другой обычный символ(a,b,c,... ). Это происходит из определения текстового файла POSIX .

Это может вызывать проблемы в некоторых языках, таких как сценарии оболочки (sh, bash, zsh, ksh,... ). Если вам повезет, сценарий завершится ошибкой из-за синтаксической ошибки, вызванной ложным дополнительным аргументом. Однако в плохих случаях это может проникнуть в содержимое файлов и имена файлов.

В основном это проблема инструментов и языков, предназначенных только для работы под linux/unix. Многие языки и инструменты, не зависящие от платформы, адаптируются автоматически. Так что вы вряд ли увидите проблему IDE или редактора кода.


Итак, чтобы попытаться закончить спор с коллегами,ни в одном linux нет проблем с окончаниями строк CRLF. Однако некоторые инструменты и языки могут давать сбои или делать странные вещи, если их оставить.

Если вы пишете код для запуска на платформах Linux/Unix, то, как правило, проще настроить git так, чтобы он удалял все символы CR, оставляя вам окончания строк LF.

4
20.08.2021, 12:08

Linux-приложения и библиотеки приложений в основном без проблем обрабатывают все типы новых строк, включаяCRLF(MS -DOS, Windows )илиLF(Unix, Linux ). Вам не нужно ничего менять или указывать. Старая классическая MacOS(не современная MacOS X )использует CRи такие файлы не будут обрабатываться должным образом (все будет одной строкой ).

Бывают ситуации, когда у вас могут возникнуть проблемы с CRs, но вы можете решить их в каждом конкретном случае.

$ wc -l /tmp/test-*
 2 /tmp/test-dos.txt
 0 /tmp/test-mac.txt
 2 /tmp/test-unix.txt
 4 total

Инструменты для удаления CR: dos2unixи, например,.:

tr -d '\r' < input > output

илиsed

sed -i 's/\r$//g' file
-2
20.08.2021, 10:22

В общем, POSIX определяет текстовый файл как файл, в котором каждая строка заканчивается символом LF. Таким образом, большинство утилит POSIX воспринимают CRLF как строку с обычной строкой, оканчивающейся на CR перед концом, который рассматривается как обычный символ.

Приемлемо ли это, зависит от ваших потребностей. Например, wc, вероятно, не будет сильно заботиться о CR при подсчете слов, тогда как вы можете обнаружить, что использование cutили awkдля выбора определенных полей может привести к выводу CR, которого вы не ожидали. Как отмечали другие, большинство совместимых с POSIX -оболочек (даже в Windows )не воспринимают CR и просто отказываются работать с синтаксической ошибкой

.

Большинство текстовых редакторов, независимо от платформы, могут обрабатывать как окончания CRLF, так и LF, а некоторые также могут обрабатывать устаревшие MacOS (, то есть MacOS 9 и ранее )окончания строк CR. Таким образом, какие окончания строк вы должны использовать, зависит в основном от личных предпочтений, платформы, на которой вы работаете, и инструментов, с которыми вы работаете.

Если вы используете Git, лучше всего сообщить Git, что определенные файлы являются текстовыми файлами (, то есть в них должны быть преобразованы окончания строк ). Это заставит Git хранить файлы внутри с окончаниями LF, а затем конвертировать их при извлечении по желанию. Вы можете сделать это, добавив что-то подобное в свой файл .gitattributesв репозитории:

*.c text
*.h text
*.sh text eol=lf
*.ps1 text eol=crlf
*.jpg -text

Указывает, что файлы .cи .hявляются текстовыми и могут быть извлечены с окончанием строки в соответствии с настроенными пользователем параметрами, и будут записаны в репозиторий с окончанием LF. Для файлов .shи репозиторий, и рабочее дерево будут иметь окончания LF, а для файлов .ps1—репозиторий будет иметь окончания LF, а рабочее дерево всегда будет иметь окончания CRLF, независимо от платформы. В файлах .jpgвообще не будет строки -, заканчивающей преобразование.

Если вы не хотите указывать все типы файлов, вы можете просто написать это:

* text=auto

и Git попытается сделать все правильно автоматически.

2
21.08.2021, 09:08

Теги

Похожие вопросы