Пустая строка Bash выдает ошибку

Я написал небольшой скрипт резервного копирования NEOS, который выгружает мою базу данных mysql и сжимает ее.

На моем ноутбуке (Deepin OS) скрипт работает хорошо, но на сервере выдает ошибки...

https://gist.github.com/breadlesscode/2f2e274a3c9314b99ac71fc6b2afb07a

Пустые строки выдают ошибки?! Я не знаю почему. Я пробовал разные линии, но это не работает.

bash -x ./crons/BackupNeos.sh Вывод:

+ BACKUP_FOLDER=%s_NEOS_Backup
+ NEOS_ROOT=$'/html/neos\r'
+ BACKUP_ROOT=$'/html/backups\r'
+ NEOS_PACKAGE=$'My.Package\r'
+ COMPRESS_BACKUP=$'true\r'
+ NEOS_FLOW_EXPORT=$'true\r'
+ MYSQL_FULL_BACKUP=$'true\r'
+ MYSQL_HOST=$'server\r'
+ MYSQL_USER=$'user\r'
+ MYSQL_PW=$'password\r'
+ MYSQL_DB=$'database\r'
+++ date +%Y-%m-%d_%H-%M-%S
++ printf %s_NEOS_Backup 2017-01-15_18-53-30
+ BACKUP_FOLDER=$'2017-01-15_18-53-30_NEOS_Backup\r'
++ printf %s/%s $'/html/backups\r' $'2017-01-15_18-53-30_NEOS_Backup\r'
+ BACKUP_FOLDER_PATH=$'/html/backups\r/2017-01-15_18-53-30_NEOS_Backup\r\r'
+ $'\r'
: Command not found.le 18: 
' printf 'Backup script start:\n\n
Backup script start:

+ cd $'/html/backups\r\r'
: File or directory not foundtml/backups
' printf 'Create backup folder...
+ mkdir $'2017-01-15_18-53-30_NEOS_Backup\r\r'
' printf 'done!\n
done!
+ $'\r'
: Command not found.le 24: 
./crons/BackupNeos.sh: Zeile 51: Syntax Error: worong eol.

Кто-нибудь может мне помочь?


person Marvvvv    schedule 15.01.2017    source источник
comment
Добро пожаловать в Stack Overflow. Обратите внимание, что предпочтительный способ сказать «спасибо» здесь — проголосовать за хорошие вопросы и полезные ответы (если у вас достаточно репутации для этого) и принять наиболее полезный ответ на любой заданный вами вопрос (что также дает вы немного повышаете свою репутацию). См. страницу О, а также Как мне задавать вопросы здесь? и Что мне делать, когда кто-то отвечает на мой вопрос?   -  person Jonathan Leffler    schedule 15.01.2017


Ответы (1)


'\r' - это маркер EOL Windows, который не работает в unix-подобных ОС.

пытаться

dos2unix ./crons/BackupNeos.sh

Который преобразует EOL в правильный.

Альтернативный подход с использованием sed:

sed -i 's/^M$//' ./crons/BackupNeos.sh
person rkosegi    schedule 15.01.2017
comment
О человек спасибо! Это была моя FTP загрузка. Я установил режим передачи на двоичный, и все в порядке =) - person Marvvvv; 15.01.2017
comment
\r — это традиционный (до OS X, т. е. MacOS 9 и более ранние версии) возврат Mac. Windows \r\n. - person BlueM; 16.01.2017