Почему скрипт из Windows не запускается на сервере («bad interpreter», ^M) и как перевести файл в формат Unix.
Содержание
В Windows каждая строка текстового файла заканчивается двумя символами — CR и LF, а в Linux и FreeBSD одним, LF. Скрипт или файл настроек, сохранённый в Windows, сервер может читать с ошибками.
Признаки
- при запуске скрипта —
/bin/bash^M: bad interpreter: No such file or directory; - в vim в конце строк видно
^M; - команда
file script.shпишет «with CRLF line terminators».
Как исправить
Проще всего — программой dos2unix:
dos2unix script.sh
Если её нет, установите: sudo apt install dos2unix, sudo dnf install dos2unix, во FreeBSD — sudo pkg install dos2unix. Без установки в Linux:
sed -i 's/\r$//' script.sh
В любой системе — через новый файл:
tr -d '\r' < script.sh > script-unix.sh
Обратно, в формат Windows: unix2dos файл.txt (из того же пакета).
Как не допускать
Выберите в редакторе на компьютере окончания LF: в VS Code — надпись «CRLF» внизу справа → «LF», в Notepad++ — меню «Правка», пункт про формат конца строк → UNIX (LF). Если файлы попадают на сервер через git, за окончания строк отвечает настройка core.autocrlf.

