Ошибка /bin/bash^M: bad interpreter: No such file or directory при запуске скриптов

Ошибка /bin/bashM: bad interpreter: No such file or directory при запуске скриптов

Вступление

Иногда при запуске различных sh скриптов можно столкнуться вот с такой ошибкой:

bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory

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

Причина возникновения

Как видно из текста ошибки, при запуске скрипта вместо стандартного шелла /bin/bash скрипт пытается запустить его из директории /bin/bash^M и ожидаемо выдает ошибку, потому что такого пути не существует. Все дело в том, что ^M - это символ возврата каретки (окончания строки), который обычно используется на Windows системах. По всей видимости, данный скрипт редактировался каким-либо текстовым редактором, в настройках которого был выставлен режим Windows (а не Linux) и из-за этого, при запуске скрипта получается такая ошибка.

Как исправить ошибку (способ 1: очень быстрый)

Допустим, наш скрипт, при запуске которого мы получаем ошибку будет называться script.sh.
1) Делаем его резервную копию, чтобы иметь возможность восстановить работоспособность, если что-либо пойдет не так.
2) Запускаем следующую команду:

sed -i -e 's/\r$//' script.sh

Она должна заменить все символы переноса строки Windows на те, которые используются на Linux системах. Способ не совсем универсальный, поэтому иногда может не сработать.
3) После выполнения данной команды, пытаемся запустить на скрипт script.sh и проверить работоспособность. Если не помогло, то восстанавливаем оригинал из резервной копии и переходим ко второму способу.

Как исправить ошибку (способ 2: медленный, но очень надежный)

Если первый способ не помог, либо если вы часто сталкиваетесь с такой ошибкой, то можно воспользоваться специальной утилитой dos2unix, которая как раз подходит для таких случаев
1) Делаем резервную копию script.sh, чтобы восстановить его в случае проблем.
2) Устанавливаем утилиту dos2unix

sudo apt update && sudo apt install dos2unix

3) Выполняем команду:

dos2unix script.sh 
dos2unix: converting file script.sh to Unix format...

4) После выполнения данной команды, пытаемся запустить на скрипт script.sh и проверить работоспособность.

Была ли эта статья Вам полезна?

Комментарии к статье (3)

    • Андрей

    Способ 1 помог, но сработало только после перезагрузки машины

    • Гость

    Статья мне не помогла, потому что, по мнению автора, оказалось невозможно исправить ошибку системными способами, если первый вариант не сработал. У меня именно такая ситуация, машину с проблемой невозможно подключить к интернету

      • AJIekceu4

      Всегда есть флешки или возможность самому удалить ^M в текстовом редакторе, например vi, который может делать такие замены.

Добавить комментарий для AJIekceu4

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

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.