Zshell запускается с ошибкой (показано в теме Powerline9k)

Недавно я установил Zshell вместо Bash. Во время этого я увидел, что мой $PATH имеет длину 7 миль, - поэтому я решил попробовать немного его почистить. Когда я удалил rvm (запустив rvm implode, а затем rm -rf ~/.rvm), затем, когда я перезапустил свой терминал, я теперь вижу ошибку:

ошибка zshell powerline9k

Если я просто нажму ENTER, то ошибка останется. Но если я делаю любую другую команду, то она исчезает (ls, echo, source ~/.zshrc - как ни крути).

zshell powerline9k ошибка-2

Если я перезагружаю iTerm (или открываю новую вкладку), - то ошибка появляется снова.

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

Моя интуиция подсказывает мне, что это как-то связано с моим путем, но я не уверен. Мой путь намного короче, чем до установки RVM.

Если я переименую свой ~/.zshrc-файл, то Powerline9k-тема деактивируется, поэтому я не вижу, появляется ли ошибка на самом деле или нет. Но я пробовал... Затем просто запускается zshell без темы.

Есть идеи, как это исправить или как отладить?

ИЗМЕНИТЬ

Я только что понял, что на самом деле это могла быть остаточная ошибка, когда я запускал bash, поэтому я также добавил этот тег.


person Zeth    schedule 04.08.2017    source источник


Ответы (3)


Если визуальное пятно исчезнет, ​​как только вы выполните любую команду, просто поместите echo -n в конце вашего .zshrc в качестве быстрого и простого исправления, если вы не готовы к задаче отладки и потенциально можете вызвать больше проблем на твоя машина.

Вопрос не стоит вашего времени ;)

Редактировать: видимо вышеописанное не сработало. Смотрите комментарии.

Если вы заинтересованы в отладке, хорошей отправной точкой было бы размещение set -xe (печатать каждую выполняющуюся строку и прерывать любую строку, которая выходит ненулевой) в начале (после строки шебанга или в качестве флагов в шебанге) каждого сценарий конфигурации, который выполняется при запуске новой интерактивной оболочки.

Также учтите, что set -xeuo pipefail дополнительно перехватывает и прерывает использование неустановленных переменных оболочки и команд, которые возвращают ненулевое значение внутри каналов (например, set -e не будет прервано на false | true, потому что общая строка завершилась со статусом 0, но -o pipefail прервется на такой строке). Стоит отметить, что эти флаги относятся к функциям bash, но поскольку zsh является надмножеством функций bash, они работают и в zsh.

person JoshuaRLi    schedule 10.08.2017
comment
echo -n не решил эту проблему для меня (и echo -n '\n' тоже). Я попытался вставить set -xe в свой .zshrc-файл, и это было потрясающе! Я вижу во второй строке, что он пишет это: Last login: Thu Aug 10 21:45:40 on ttys000 +/Users/[USERNAME]/.zlogin:2> [[ -s /Users/[USERNAME]/.rvm/scripts/rvm ]]... Где я могу найти, откуда это? Этот каталог больше не существует (тот, что .rvm). Я попытался запустить grep -nr 'rvm' /*, но не нашел ничего, что можно было бы использовать... - person Zeth; 10.08.2017
comment
@Zeth Эта строка проверяет, существует ли этот файл и имеет ли он размер больше нуля, и, поскольку его больше нет на вашем компьютере, она возвращает ненулевой код выхода, который обнаруживает ваша линия электропитания. - person JoshuaRLi; 10.08.2017
comment
@Zeth У меня нет опыта работы с ruby, но я предполагаю, что установка rvm вставила это в ваш файл .zlogin. Простое удаление этой строки из .zlogin должно решить вашу проблему! - person JoshuaRLi; 10.08.2017
comment
Ты был прав!! И, запустив grep -nr '.rvm/scripts/rvm' /*, я увидел, что за этот вызов отвечает Dreamweaver. У меня больше нет ошибок! - person Zeth; 10.08.2017
comment
Рад, что смог помочь, спасибо за щедрость! Если в будущем вы столкнетесь с какими-либо проблемами со сценариями оболочки, эти флаги отладки, безусловно, очень пригодятся. - person JoshuaRLi; 10.08.2017

Посмотрите их документацию на github, соответствующий фрагмент находится здесь.

Решение:

В вашем ~/.zshrc найдите переменную с именем POWERLEVEL9K_LEFT_PROMPT_ELEMENTS и удалите rbenv.

Объяснение:

Значение по умолчанию для POWERLEVEL9K_LEFT_PROMPT_ELEMENTS равно (context dir rbenv vcs), и вполне вероятно, что rbenv является сегментом, вызывающим ошибку — после удаления rvm этот сегмент не может выполняться.

person boojum    schedule 10.08.2017
comment
Хорошая догадка, но это было не так. Я попытался удалить все PROMPT_ELEMENTS, кроме левого и правого (кроме status), - и это все равно выдавало мне ошибку. - person Zeth; 10.08.2017

Удалите все приложения, которые используют путь, и переустановите. Это единственный способ. Вместо rm вы должны создать псевдоним с корзиной для мусора.

person Νικόλαος Μανωλα&    schedule 06.08.2017
comment
Это "безопасный" способ сделать это - да. Но меня раздражает наличие терминала, который может показать мне, что есть какая-то ошибка, но не то, что это за ошибка. Так что я лучше узнаю, как «интерпретировать» то, что говорит мне мой терминал, вместо того, чтобы вырывать его с корнями, пересаживать и надеяться, что он больше никогда не сделает ничего подобного. - person Zeth; 07.08.2017