среда, 26 ноября 2014 г.

Перенос строки в Windows и Linux

Сегодня столкнулся с проблемой, когда текстовый файл читается по-разному в двух ОС - Windows и Linux.
Проблема возникла при создании пакетного sh-файла с Linux-командой "cp". Файл был подготовлен на Windows, а предназначался для выполнения на Linux.
При выполнении появились ошибки. Оказалось, что в конце строки текстовый редактор под Linux "видит" символ "^M":

В Windows:
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_19367.trc ./
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_22650.trc ./
...

В Linux:
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_19367.trc ./^M
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_22650.trc ./^M
...

При просмотре файла в Notepad++ в режиме просмотра доп.символов видно, что в среде Windows концовка строки выглядит так:
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_19367.trc ./[CR][LF]
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_22650.trc ./[CR][LF]
...

В итоге, при просмотре такого файла в текстовом редакторе под Linux видит эти символы так
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_19367.trc ./^M
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_22650.trc ./^M
...

Чтобы Linux корректно выполнял пакетные файлы, нужно, чтобы символы в конце строки были такими:
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_19367.trc ./[LF]
cp /opt/oracle/diag/rdbms/azk/azk/trace/azk_ora_22650.trc ./[LF]
...

Найти инструмент под обеими ОС, чтобы автоматизировать процесс поиска/замены таких символов.

Комментариев нет:

Архив