Функции завершения ZSH не работают

1765
Marcel

Моя установка oh-my-zsh, которая работала почти год, только что сломалась. Когда я открываю терминал, я получаю:

/home/marcel/.oh-my-zsh/lib/theme-and-appearance.zsh:2: colors: function definition file not found /home/marcel/.oh-my-zsh/oh-my-zsh.sh:78: compinit: function definition file not found /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:80: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:93: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:100: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:109: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:119: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:129: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:138: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:144: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:147: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:150: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:153: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:163: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:166: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:168: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:182: command not found: compdef /home/marcel/.oh-my-zsh/plugins/git/git.plugin.zsh:193: command not found: compdef $SPACESHIP_PROMPT_TRUNC is deprecated. Use $SPACESHIP_DIR_TRUNC instead. spaceship_setup:3: add-zsh-hook: function definition file not found spaceship_setup:4: add-zsh-hook: function definition file not found $SPACESHIP_PROMPT_TRUNC is deprecated. Use $SPACESHIP_DIR_TRUNC instead. spaceship_setup:3: add-zsh-hook: function definition file not found spaceship_setup:4: add-zsh-hook: function definition file not found 

Я посмотрел вокруг, и многие другие ответы предлагают бежать compaudit. Запуск это дает мне zsh: compaudit: function definition file not found.

Что я пробовал:

  1. rm ~/.zcompdump*
  2. Переустановка о-о-о-о
  3. Переустановка zsh из источника
  4. Добавление /usr/share/zsh/functionsк$fpath
  5. chown -R 755 /usr/share/zsh/functions
  6. Загрузка и запуск compauditвнутриzsh -f

Моя среда:

  • uname -a: Linux Hermes 4.11.6-1-ARCH #1 SMP PREEMPT Sat Jun 17 08:19:42 CEST 2017 x86_64 GNU/Linux
  • zsh --version: zsh 5.3.1 (x86_64-unknown-linux-gnu)
  • which zsh: /usr/local/bin/zsh

Редактировать:

Я подтвердил, что это проблема с разрешениями. Если я сделаю

sudo zsh -f autoload -U compaudit compaudit 

Команда работает как положено. Я тогда сделал

sudo chmod 777 /usr/share/zsh/ -R # Just for testing I promise 

и я все равно получил zsh: compaudit: function definition file not foundпри беге compaudit.

Я тоже пробовал

sudo chown user:users /usr/share/zsh/ -R 

и это все еще не работает. Если все эти файлы принадлежат моему пользователю и являются 777, как zsh работает как root, а не как мой пользователь?

2
Это был мой $ FPATH. Я должен был знать. Я пытался добавить что-то к этому, но я думаю, что я добавил не то. Я просто скопировал его из root, потому что root работает нормально, и теперь все идеально. Большое спасибо! Marcel 6 лет назад 0
Напишите это лучше в ответе, и я дам вам награду. Marcel 6 лет назад 0

2 ответа на вопрос

2
Pimp Juice IT

Согласно подсказке в проблемах установки с цветами, плагином compinit и git # 4757, кажется, что проверка « содержимого переменной $ FPATH » содержит правильный путь к месту установки функций, которое должно помочь решить проблему.

Кроме того, копирование содержимого zsh в такое место, как корень или путь, уже определенный в, $FPathможет также помочь решить эту проблему.

Первое, что нужно сделать, это проверить содержимое переменной FPATH: echo $ FPATH. В нормальной ситуации вернуть что - то вроде этого: /home/charmander/.oh-my-zsh/plugins/git:/home/charmander/.oh-my-zsh/functions:/home/charmander/.oh-my-zsh/completions:/home/charmander/.oh-my-zsh/plugins/python:/home/charmander/.oh-my-zsh/plugins/pip:/home/charmander/.oh-my-zsh/plugins/git:/home/charmander/.oh-my-zsh/functions:/home/charmander/.oh-my-zsh/completions:/usr/share/zsh/site-functions:/usr/share/zsh/5.0.2/functions.

В моем случае он вернулся: /opt/intel/composer_xe_2011_sp1.7.256/mkl/include. При попытке удалить .oh-мой-ЗШ и запустить только ЗШ вернулся в этом: /usr/share/zsh/5.0.2/scripts/newuser:6: zsh-newuser-install: function definition file not found. Поиск в Интернете Я нашел этот отчет об ошибке: zsh: во многих определениях функций отсутствуют zsh-newuser-install, compinit и т. Д., Которые говорят, что может иметь переменную перезапись, сделанную компилятором Intel: /

Таким образом, можно обойти эту проблему, вставив следующие строки в ваш .bash_profile, если вы не можете запустить эту команду chsh -s $ (которая zsh).

FPATH=/home/modelagem/beatriz.fonseca/.oh-my-zsh/plugins/python:/home/modelagem/beatriz.fonseca/.oh-my-zsh/plugins/pip:/home/modelagem/beatriz.fonseca/.oh-my-zsh/plugins/git:/home/modelagem/beatriz.fonseca/.oh-my-zsh/functions:/home/modelagem/beatriz.fonseca/.oh-my-zsh/completions:/usr/share/zsh/site-functions:/usr/share/zsh/5.0.2/functions  export FPATH 

источник

Кроме того, согласно подсказке от colors: файл определения функции не найден # 4607, похоже, что другие решили эту проблему, добавив $HOME/usr/share/zsh/'version of zsh'/functionsдля решения этой проблемы установку zsh, так как это $HOME/usrможет вызвать эту проблему.


Дальнейшее чтение

 FPATH The search path for function definitions. The directories in this path are searched for a file with the same name as the function or command when a function with the -u attribute is referenced and when a command is not found. If an executable file with the name of that command is found, then it is read and executed in the current environ-ment. environment. ment. Unlike PATH, the current directory must be represented explicitly by . rather than by adjacent : characters or a beginning or ending :. 

источник


9.1 Функции автозагрузки

Функция может быть помечена как неопределенная с помощью встроенной функции автозагрузки (или «functions -u» или «typeset -fu»). У такой функции нет тела. Когда функция выполняется в первый раз, оболочка ищет ее определение, используя элементы переменной fpath.

источник

2
Aaron Massey

Я просто хотел добавить краткое замечание, что эта ошибка также может произойти, если у вас установлены две отдельные версии ZSH. Убедитесь, что в вашей FPATH нет ничего, что было бы несовместимо с версией ZSH, которую вы используете для своей реальной оболочки входа в систему.

Похожие вопросы