Я использую Notepad++ и набираю:
read s
echo "$s"
Выходные данные:
И затем я пытаюсь поставить точку с запятой:
read s;
echo "$s"
и выход:
Я сохраняю файл как q.sh
и запускаю с помощью cygwin, но я все еще не могу использовать read
оператор, поэтому я запутался. Я пробовал другие редакторы, vi
но вывод тот же.
Что не так? Как заставить это работать?
решение1
Текстовый файл, который составляет скрипт оболочки, был написан в Notepad++. Этот редактор сохраняет файлы как текстовые файлы DOS по умолчанию, которые, с точки зрения Unix, имеют лишний возврат каретки ( \r
) в конце каждой строки. Это сбивает с толку sh
.
Чтобы удалить его:
$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh
Сценарийделаетотсутствует #!
-строка (как указано в комментариях), но если вы запускаете его с явным интерпретатором ( sh q.sh
), это не нужно.
Добавление строки
#!/bin/sh
(после chmod +x q.sh
) запуск его в качестве будет ./q.sh
вести себя точно так же, как запуск его с sh q.sh
.
решение2
Другой способ преобразовать возврат каретки для Unix, если у вас есть доступ к Notepad++. В Notepad, перейдите: Правка -> Конвертация EOL -> Unix (LF)
На французском это: Edition -> Convertir les sauts de ligne -> Converti au format Unix (LF)
Это может быть быстрее.