Ошибки терминала при загрузке zsh (команда не найдена: ^M)

Я перехожу с oh-my-zsh на prezto. И теперь я столкнулся со следующей ошибкой каждый раз, когда я открываю окно терминала:

/Users/jasenlew/.zshenv:7: command not found: ^M
/Users/jasenlew/.zshenv:13: parse error near `\n'
/Users/jasenlew/.zprofile:7: command not found: ^M
/Users/jasenlew/.zprofile:11: command not found: ^M
/Users/jasenlew/.zprofile:80: parse error near `\n'
/Users/jasenlew/.zshrc:7: command not found: ^M
/Users/jasenlew/.zshrc:15: parse error near `\n'
/Users/jasenlew/.zlogin:7: command not found: ^M
/Users/jasenlew/.zlogin:15: command not found: ^M
/Users/jasenlew/.zlogin:9: command not found: ^M
/Users/jasenlew/.zlogin:12: command not found: then^M
/Users/jasenlew/.zlogin:16: command not found: ^M
/Users/jasenlew/.zlogin:21: parse error near `\n'
/Users/jasenlew/.zlogin:zcompile:13: can't open file: /Users/jasenlew/.zcompdump^M^M
/Users/jasenlew/.zlogin:14: command not found: fi^M

Я уже удалил oh-my-zsh и установил prezto в соответствии с репозиторием/инструкциями здесь: https://github.com/hackreactor-labs/prezto.

Я немного погуглил и попробовал несколько решений, ни одно из которых не сработало, в том числе изменение строки в моем файле .gitconfig с «autocrlf = true» на «autocrlf = false».

Я обнаружил кое-что (что меня смутило) о том, что межстрочный интервал не обрабатывается правильно, но не понял этого полностью, а указания по устранению были туманными.

Спасибо еще раз за помощь!


person jasenlew    schedule 13.06.2014    source источник


Ответы (1)


Ваши файлы /Users/jasenlew/.z* имеют окончания строк в стиле Windows, которые zsh не распознает.

Концы строк текстовых файлов в стиле Windows помечены парой CR-LF; CR (возврат каретки) часто представляется как ^M (Ctrl-M).

В текстовых файлах в стиле UNIX концы строк помечаются только символом LF (перевод строки).

zsh предполагает окончания строк в стиле UNIX и обрабатывает пару CR-LF как символ ^M в конце строки.

Вам просто нужно удалить окончания строк в стиле Windows.

Если у вас установлен dos2unix, вы можете использовать его. Обязательно прочитайте справочную страницу; в отличие от большинства текстовых фильтров, он по умолчанию заменяет свой входной файл.

Или вы можете использовать tr, например:

tr -d '\r' < filename > filename.tmp
# check filename.tmp to make sure it's correct
mv filename.tmp filename

Вы также можете использовать команду file, чтобы определить, какой у вас файл. Это не на 100% надежно, но, вероятно, сообщит, какие строки заканчиваются в данном файле.

После того, как вы исправили окончания строк, вы можете вернуть файлы обратно в свой репозиторий Git, а затем убедиться, что они все еще в порядке.

(Возможно, вы также захотите изменить настройки .gitconfig. Настройки по умолчанию должны быть в порядке. Я не знаю подробностей навскидку.)

person Keith Thompson    schedule 13.06.2014
comment
Классный Кит! Спасибо большое!! Работал как шарм!! - person jasenlew; 14.06.2014