При работе со скриптами в редакторах на платформе 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++, необходимо перейти в меню Опции – Настройки и далее выбрать вкладку настройки “Новый документ” (скриншот ниже).

Настройка Notepad++

Далее создаем новый документ, не забыв указать кодировку UTF-8 (без BOM)

Notepad++ Кодировка

После этого необходимо открыть код старого скрипта и скопировать во вновь созданный файл. Далее сохранить полученный документ и переместить его на 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
Теги:
Загрузка Все права защищены © 2016 ИТ-Инженер (Краснодар)
 
把手拿回