При настройке pyenv получение команды eval не найдено

Как указано в заголовке, я настраиваю pyenv для запуска python 3.8.5 в моей учетной записи на моем другом Mac. Проблемы, которые, как мне кажется, возникают из-за этой команды в моем файле ~ / .zshrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval"$(pyenv init-)"\nfi' >>~/.zshrc

Пока я проверил команду $ PATH, чтобы убедиться, что с ней все в порядке, и команду экспорта, но не смог решить проблему. Также попытался использовать указанную выше команду в оболочке bash с ~ / .bash_profile в конце, все еще не работает. Я не могу запустить brew bash или brew zsh из-за проблем с правом собственности.

Я следую этому руководству настроить его, если это поможет.

обновлено: снимок экрана  введите описание изображения здесь  введите описание изображения здесь

Обновлено 2:  введите описание изображения здесь


person J Scott Anderson    schedule 25.07.2020    source источник
comment
Похоже, что в команде, которую вы добавили в свой .zshrc (и .bash_profile), отсутствуют некоторые пробелы, в частности, между eval и двойной кавычкой, а также между init и тире. Могут быть и другие проблемы, но я вижу именно их. Поскольку это было неправильно добавлено к этим файлам, вам необходимо отредактировать их, чтобы устранить проблему (простой повторный запуск команды этого не сделает, он просто добавит правильную версию в дополнение к неправильной версии).   -  person Gordon Davisson    schedule 26.07.2020
comment
@GordonDavisson Я исправил интервал, но все еще получаю сообщение об ошибке   -  person J Scott Anderson    schedule 26.07.2020
comment
@JScottAnderson Вы все еще получаете точно такую ​​же ошибку после исправления опечаток в вашей команде (echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc)? Можете ли вы проверить, что ваш ~/.zshrc не имеет этой ошибки от предыдущего запуска этой ошибочной команды? А также не забудьте перезапустить оболочку (например, exec "$SHELL") после всего этого!   -  person errata    schedule 26.07.2020
comment
@errata Я проверил и перезапустил оболочку. Ошибка все еще остается   -  person J Scott Anderson    schedule 26.07.2020
comment
@JScottAnderson, это действительно странно, не могли бы вы показать нам свои ~/.zshrc или хотя бы grep несколько строк вокруг eval команды из того же файла, на всякий случай? Полагаю, выхода grep -C 3 eval ~/.zshrc должно хватить ...   -  person errata    schedule 26.07.2020
comment
@errata Добавил скриншот с командой grep   -  person J Scott Anderson    schedule 26.07.2020
comment
Должен признаться, что command not found: eval ошибки я никогда не видел: | Просто любопытно, что происходит, когда вы запускаете eval "$(pyenv init -)" в своей оболочке?   -  person errata    schedule 26.07.2020
comment
Эти сообщения об ошибках выглядят немного странно - между command not found: и eval есть лишний пробел. Это говорит о том, что вместо обычного пробела может быть что-то вроде неразрывного пробела, который выглядит нормально, но не будет работать должным образом. Попробуйте запустить grep eval ~/.zshrc | LC_ALL=C cat -v   -  person Gordon Davisson    schedule 26.07.2020
comment
@errata запускает его в оболочке, работает нормально, без ошибок   -  person J Scott Anderson    schedule 26.07.2020
comment
@GordonDavisson Я получил это в результате выполнения этой команды [M-BM- eval $ (pyenv init -)]   -  person J Scott Anderson    schedule 26.07.2020
comment
Это то, о чем я думал. Эта M-BM- вещь перед eval - это отображение неразрывного пробела. Вам нужно использовать редактор, чтобы удалить символ прямо перед eval.   -  person Gordon Davisson    schedule 26.07.2020
comment
@GordonDavisson, так что я должен использовать другой, кроме vi?   -  person J Scott Anderson    schedule 26.07.2020
comment
vi должно работать. Просто поместите курсор на символ перед eval и нажмите x. Кстати, это не имеет значения, но я бы также рекомендовал удалить лишние пробелы внутри двойных кавычек, то есть " $(pyenv init-) " - ›"$(pyenv init-)".   -  person Gordon Davisson    schedule 26.07.2020
comment
Если вам нужен редактор графического интерфейса для написания сценариев, я бы порекомендовал BBEdit. В нем есть возможность отображать обычно невидимые странные символы (меню «Вид» - ›Отображение текста -› Показать невидимые »). Он будет показывать светло-серый кружок в неразрывных пространствах, вместо того, чтобы они выглядели как обычные пространства. Даже если вы не купите его, его бесплатный / ограниченный режим довольно хорош.   -  person Gordon Davisson    schedule 26.07.2020
comment
Давайте продолжим это обсуждение в чате.   -  person J Scott Anderson    schedule 26.07.2020


Ответы (1)


После долгого обсуждения в комментариях мы обнаружили несколько проблем с интервалом: отсутствовали пробелы, и одно пробел было неразрывным, а не простым пробелом:

                                                          |   missing   |
                                                          v             v
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >>~/.zshrc
                                                     ^
                                                     | non-breaking

Неразрывное пространство особенно сложно, поскольку оно визуально неотличимо от обычного пространства. Передача файла по конвейеру через LC_ALL=C cat -v сделала его видимым как M-BM- .

Примечание: по крайней мере, на американской клавиатуре в macOS при вводе Option-space вводится неразрывный пробел. Обычно они вводятся по ошибке, потому что по какой-то причине клавиша Option была нажата при вводе предполагаемого нормального пробела.

Редактирование файла .zshrc для добавления недостающих пробелов и удаления неразрывных пробелов исправило это.

Кстати, я добавлю здесь мораль: точный набор текста имеет значение, и когда у вас есть текстовый источник, обычно лучше скопировать и вставить, чем пытаться что-то точно перепечатать.

person Gordon Davisson    schedule 26.07.2020