|

При работе со скриптами в редакторах на платформе Windows и последующем переносе их на платформу Linux могут иметь место различные ошибки. Например:
1 2 3 4 | : not found: 10: ./script.sh: : not found: 20: ./script.sh: : not found: 21: ./script.sh: ./script.sh: 142: ./script.sh: Syntax error: word unexpected (expecting "then") |
На другой машине возникло сообщение bad interpreter о «Плохом интерпретаторе». Сообщение может быть следующего вида:
1 | /bin/sh^M: bad interpreter: No such file or directory |
Или на русский манер, если система локализована:
1 | /bin/sh^M: плохой интерпретатор: Нет такого файла или каталога |
Суть проблемы в том, что под на платформе Windows редакторы добавляют символ «возврата каретки» CR/LF. При этом не все редакторы под Linux умеют отображать указанный перенос строки, но он там есть, о чем свидетельствует сообщение об ошибке. В итоге в скрипте вместо например первой строки вида:
1 | #!/bin/sh |
Нечто подобное:
1 | #!/bin/sh>? |
Подобные символы, при этом, нигде не отображаются и можно их увидеть только в HEX-редакторе, например используя FAR Manager.
Проблема может быть решена несколькими способами.
1. В среде Windows необходимо выполнить перенастройку используемого редактора, например для Notepad++, необходимо перейти в меню Опции – Настройки и далее выбрать вкладку настройки “Новый документ” (скриншот ниже).
Далее создаем новый документ, не забыв указать кодировку UTF-8 (без BOM)
После этого необходимо открыть код старого скрипта и скопировать во вновь созданный файл. Далее сохранить полученный документ и переместить его на Linux машину для тестирования скрипта.
2. В среде Linux можно воспользоваться следующими способами.
Способ первый: команда dos2unix
Если вы работаете под Linux Debian или Linux Ubuntu, то утилита должна быть в системе. Если ее нет, то устанавливаем ее:
1 | apt-get install dos2unix |
После чего можно приступить к перекодированию:
1 | dos2unix script.sh |
По завершении перекодирования все должно нормально работать.
Способ второй: на случай, если нет dos2unix
Удаляем возврат каретки с использованием tr:
1 | cat script.sh | tr -d 'r' > corrected-script.sh |
Символ возврата каретки должен быть удален.
Вы также можете ознакомиться с другими статьями:

19th Окт 2016
|
Теги:
|