Решение проблемы с некорректным склеиванием строк в bash скриптах, запускаемых через cygwin на Windows

Стояла задача организации мониторинга Bareos бэкап сервера, работающего на базе Windows. Готовые решения были для Linux и написаны на Bash. Решено было, чтобы скрипты опроса bareos и скрипты отправки списка клиентов на Zabbix сервер через Cygwin.

Скрипт, формирующие список клиентов обращается в PostgresSQL БД и формирует JSON для заббикса. В нем и возникла ситауация, когда строки не конкатенируются (склеиватся), а накладываются друг на друга. 

Следующий скрипт

давал на выходе одну некорректную строку вида:

А должен был выдать корректный JSON

Получается, что код вида JSON=$JSON»]}» не склеивал строку, а накладывал одну на другую.

Проблема кроется в настройках возврата «каретки» (carriage-return) для Cygwin и в форматировании самого файла.

В интернете предалагается использовать утилиту dos2unix, которой нужно передать имя скрипта и после этого запускать. Однако, данной утилиты не было в моей версии cygwin, поэтому нашлось следующее решение:

Добавьте следующие команды в .bash_profile или, например, непосредственно в сам bash скрипт:

Последняя команда указывает, что нужно игнорировать окончане строки (\r) Windows при исполении скрипта.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*
*