Я использовал Cygwin на своем ноутбуке (DOS). У меня есть коллекция сценариев от моих коллег и мои собственные. Я не айтишник, не разбираюсь в Unix. Я следую синтаксису моих коллег и могу управлять несколькими простыми вещами.
Скрипты хорошо работали на моем старом ноутбуке. Я только что поменял ноутбук, установил Cygwin. Когда я запускаю свои скрипты, они не работают. Вот один пример сообщения об ошибке, которое я получаю:
line 1: $':\r': command not found
line 5: syntax error near unexpected token `$'\r''
line 5: `fi
Вот 5 строчек моего скрипта
:
iter=1
if [ -f iter.txt ]
then rm ./iter.txt
fi
Может кто-нибудь объяснить, как я могу обойти эту проблему?
источник
vim
может сделать это двумя способами, один из которых использует слова. Или, что еще лучше, указать, где на эту подчиненную задачу снова и снова отвечали здесь, гораздо более подробно, чем любой ответ на этой странице, включая unix.stackexchange.com/questions/88811 только для начинающих.vi -b
,\r
являются ВИМ расширения в любом случае. не POSIX, не в nvi, elvis, Solaris vi ...Это связано с тем, что скрипт был сохранен редактором, использующим окончания строки DOS (например, Notepad ++). Вам придется удалить их из ваших сценариев.
Для этого либо воспользуйтесь
dos2unix
файлом скрипта, либо(это удалит все возвраты каретки из любого места в скрипте)
Что касается кода в скрипте:
Это должно выглядеть примерно так
Это удаляет файл
1.txt
из текущего каталога, если он существует. Команда:
ничего не делает (почти) и может быть удалена. Значениеiter
переменной следует использовать как$iter
и в кавычках. И тогда я, возможно, буду более явным, чем нужно, используя,./
чтобы сказать, что файл должен быть найден в текущем каталоге.Если вы планируете , чтобы превратить это в петлю (здесь, удаление всех файлов
1.txt
,2.txt
...,10.txt
):Или, если мы чувствуем себя подлыми / ленивыми,
в оболочках, которые понимают расширение скобки.
источник
Windows (CR LF)
и изменить его наUnix (LF)
rm -f [1-9].txt 10.txt
. Но это не совсем логически эквивалентны, так как если нет файлов 1-9 , но там есть файл буквально называется ,[1-9].txt
то он будет удален. : DВаши сценарии имеют неправильные окончания строк. Windows использует CR + LF (\ r \ n), Unix использует LF (\ n), а Classic MacOS использует CR (\ r). Вам нужно будет изменить окончания строк во всех затронутых файлах, либо с помощью текстового редактора, либо с помощью отдельного инструмента, такого как
dos2unix
.Системы FTP и системы контроля версий, такие как SVN, как правило, способны соответствующим образом преобразовывать окончания строк, поэтому вы можете захотеть изучить эти варианты для передачи файлов в будущем.
Если эти файлы не передаются, а используются только на одном компьютере, вы можете найти настройки для концов строк в предпочитаемом вами текстовом редакторе. Большинство, которые рекламируются как «для программистов», будут иметь такую возможность.
источник
В качестве дополнительного ответа позвольте мне добавить пару заметок / советов ...
Во-первых, для обычных текстовых файлов вы можете легко определить, заканчиваются ли они строкой Unix или DOS, используя
file
команду. Например:Обратите внимание на мое использование
dos2unix
. Я настоятельно рекомендую вам установить его. В зависимости от того, как вы используете Cygwin, вам может понадобиться делать это преобразование достаточно часто, поэтому удобство приветствуется. Что еще более важно, нет никакой ошибки, как вы получаете с ручными правками, обсуждаемыми здесь.Для установки запустите основной исполняемый файл Cygwin. Это имя с именем setup-x86_64.exe или что-то в этом роде. Убедитесь, что вы видите такой экран:
Поскольку вы уже выполнили первичную установку, вы сможете нажимать Далее до тех пор, пока не появится экран выбора. Выберите Full в раскрывающемся списке и введите «dos2» в поле поиска и выберите инструмент, как показано здесь:
Затем нажмите Next еще раз и позвольте установке завершиться. Вот и все. Веселиться. Cygwin, за исключением этого случайного неудобства, является отличным пакетом.
источник
Если не dos2unix, есть также 'flip'
$ flip -u yourfilename.txt
перевернем его, используя окончания концов Unix.
источник
Я использую Notepad ++ для редактирования сценариев bash (.sh), подключившись к серверу с помощью WinSCP
(чтобы настроить редактор WinSCP на Notepad ++: https://winscp.net/rus/docs/ui_editor_preferences )
Это очень удобно для открытия файлов с серверов для редактирования / сохранения вместо редактора « Vim ».
Когда вы открываете файл в Notepad ++ , дважды щелкните по 7-му столбцу в строке состояния внизу и выберите « Unix (LF) ».
Кроме того, вы должны изменить восьмой путем кодирования -> кодировать в UTF-8 в верхней панели.
источник
Вам не нужно менять фактическую строковую кодировку файла, чтобы Cygwin's Bash успешно работал с кодировками конца строки Mac и Windows. Есть вариант, который вам просто нужно включить.
Просто обновите ваш,
~/.bash_profile
чтобы он содержалСм. Https://ptolemy.berkeley.edu/projects/chess/softdevel/faq/5.html.
источник