2

Моя установка 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 ответа2

2

Согласно подсказке в проблемах установки с цветами, плагином 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-my-zsh и запустить только zsh, возвращается следующее: /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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .