Ответ 1
Удалите контрольные символы ^M
с помощью
perl -i -pe 'y|\r||d' script.pl
Я пытаюсь запустить sh
script и получить следующую ошибку на Mac:
/usr/bin/perl^M: bad interpreter: No such file or directory
Как я могу это исправить?
Удалите контрольные символы ^M
с помощью
perl -i -pe 'y|\r||d' script.pl
/USR/бен/Perl ^ M:
Удалите ^M
в конце usr/bin/perl
из строки #!
в начале script. Это ложный символ ASCII 13, который заставляет оболочку сходить с ума.
Возможно, вам нужно будет проверить файл с помощью двоичного редактора, если вы не видите символ.
Вы можете сделать это, чтобы преобразовать файл в формат окончания строки Mac:
$ vi your_script.sh
один раз в vi тип:
:set ff=unix
:x
Проблема заключается в том, что вы пытаетесь использовать текстовый формат DOS/Windows на машине Linux/Unix/OSX.
В текстовых файлах DOS/Windows разрыв строки, также известный как новая строка, представляет собой комбинацию из двух символов: возврат каретки (CR), за которым следует линия подачи (LF). В текстовых файлах Unix разрыв строки - это один символ: Линейный канал (LF).
Dos2unix может конвертировать для вас кодировку файлов, например:
dos2unix yourfile yourfile
Для справки: man dos2unix
.
У вас, похоже, странные окончания строк в script: ^M
есть возврат каретки \r
. Преобразуйте окончание строки script в Unix (только \n
вместо \r\n
, которая является строкой, заканчивающейся в системах Windows).
Альтернативный подход:
sudo ln -s /usr/bin/perl /usr/local/bin/perl`echo -e '\r'`
И если вы предпочитаете Sublime Text - просто перейдите в View → Line Endings и отметьте Unix.