170
votes

Problème ZSH: Compinit: 503: Aucun fichier ou répertoire de ce type: / usr / local / share / zsh / site-fonctions / _Brew

J'utilise Apple M1 MacBook Pro.

Lorsque j'ai installé oh mon zsh. Lorsque j'ai ajouté export path = "/ opt / homebrew / bin: $ path" à mon fichier ~ / .zshrc. Cette erreur a été affichée dans mon terminal:

Last login: Sat Jan 16 14:53:34 on console
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask
[oh-my-zsh] Random theme 'jnrowe' loaded
Ξ ~ → cd ~
Ξ ~ → source .zshrc

compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask
# export MANPATH="/usr/local/man:$MANPATH"
[oh-my-zsh] Random theme 'cypher' loaded
joe :: ~ » chmod 755 /usr/local/share/zsh
chmod 755 /usr/local/share/zsh/site-functions

joe :: ~ » sudo chmod 755 /usr/local/share/zsh
Password:
joe :: ~ » sudo chmod 755 /usr/local/share/zsh/site-functions
joe :: ~ » ls
#ZSH_DISABLE_COMPFIX=true

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

#Homebrew
export PATH="/opt/homebrew/bin:$PATH"
export PATH="/opt/homebrew/sbin:$PATH"
#Homebrew END

#Wget
export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
#Wget END

 #Path to your oh-my-zsh installation.
export ZSH="/Users/caizhuoyue/.oh-my-zsh"

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="random"

"~/.zshrc" 114L, 3999C




Cependant, j'ai vérifié et constaté que ces deux fichiers existaient. Quelqu'un peut-il me dire que le problème est?

C'est mon fichier ~ / .zshrc:

joe :: share/zsh/site-functions » source ~/.zshrc
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew
compinit:503: no such file or directory: /usr/local/share/zsh/site-functions/_brew_cask


2 commentaires

Avez-vous (ou l'utilisateur dans lequel vous exécutez Zsh sous) avez la permission de lire ces fichiers?


Je pense que oui, j'ai utilisé chmod 755 sur ces fichiers.


12 Réponses :


4
votes

Il s'avère que ces fichiers sont des alias de deux autres fichiers qui n'existaient pas.

En effet

J'ai donc supprimé les deux alias et en faire de nouveaux pointant vers où se trouvent réellement les fichiers: / opt / homebrew / complétions / zsh / _brew et / opt / homebrew / completions / zsh / _Brew_cask .

Ensuite, j'ai utilisé source ~ / .zshrc . Aucun message d'erreur. Problème résolu!


6 commentaires

Je suppose que tu veux dire symLink , quand tu dis 'aliases_? Les fichiers n'ont pas d'alias ....


De plus, comme il a été noté dans stackoverflow.com/a/65924342/4764498 , au lieu de retirer manuellement les symboliques, c'est plus Pratique / robuste pour exécuter Brew Cleanup (qui supprimera tous les liens symboliques cassés, y compris ceux). Je crois donc que cela devrait être la réponse acceptée.


J'ai supprimé le SymLink _Brew_Cask , RAN Brew Doctor puis Brew Cleanup . Rien d'autre n'a fonctionné pour moi


@ User1934428 sur les fichiers Mac OS ont des alias. support.apple.com/ Guide / mac-help /…


@RayBaxter: Intéressant. Quelle est la différence / avantage d'un alias de fichier sur un lien symbolique? Pour atteindre cet objectif, j'aurais simplement créé un lien symbolique.


@ user1934428 J'aurais également utilisé un lien symbolique. Vous pouvez créer un alias via l'interface utilisateur.



430
votes

J'ai eu un problème similaire. J'ai couru Brew Cleanup qui a corrigé les liens symboliques.


3 commentaires

Si vous souhaitez exécuter un nettoyage comme une course à sec, pour voir les effets prévus d'abord: Brew Cleanup -n


Au moment du post, je ne pense pas que le nettoyage de brasse


Pour moi, le nettoyage du breuvage a fonctionné. Vous pouvez en savoir plus ici: github.com/ohmyzsh/ohmyzsh/issues/ 9602 # émetteur-76866337‌ 5



11
votes

Selon https://github.com/homebrew/homebrew-core/issues/ 45009

essayez

sudo chown -r $ (whoami): admin / usr / local / * \ && sudo chmod -r g + rwx / usr / local / *

puis

Brew Cleanup


2 commentaires

Merci. Cela a fonctionné pour moi. J'obtenais des erreurs autrement.


Pas tout à fait le même problème. Vous devriez obtenir des avertissements de la compine concernant les autorisations de sécurité pour celui-ci. Ce qui précède corrige cela. Cependant, devrait toujours fonctionner.



8
votes

true, le moyen le plus simple de résoudre ce problème est l'exécution: Brew Cleanup

Juste, n'oubliez pas que l'exécution de cette commande avec la version X86 Brew si vous gardiez les deux ARM et la version x86.

C'était une erreur de mes niveaux à très bas niveau, j'ai essayé de nombreuses fois pour échouer avec la commande Brew par défaut (je l'ai installée par le script et il est déjà lié à la nouvelle version du bras) avant de réaliser finalement que je devais utiliser X86 Brew pour exécuter la commande Cleanup .


1 commentaires

Si vous exécutez les deux, vous devez utiliser la commande arch pour détecter l'architecture, utilisez des instructions if-else pour charger les chemins, les FPATH, les liens symboliques, etc. pour faire correspondre la version utilisée et placer tout cela dans votre .zshrc, soit ouvrez votre terminal pour AMD64 ou utilisez Rosetta pour charger Intel. Vous pouvez réellement dupliquer votre application Terminal et en avoir une sur chacune. Méfiez-vous de tous les services de fond.



8
votes

J'ai eu ce problème après la désinstallation de Brew. Supprimez-le simplement si vous avez fait la même chose:

rm -rf /usr/local/share/zsh/site-functions/_brew


0 commentaires

3
votes
brew install zsh-completions
Fixed it.

0 commentaires

38
votes

Une approche un peu plus détaillée serait:

brew doctor && brew cleanup && source ~/.zshrc

ou une ligne:

brew doctor
brew cleanup
source ~/.zshrc

Après cela, vous pouvez voir si vous obtenez des erreurs après avoir utilisé la source.


0 commentaires

0
votes

a eu un problème similaire après avoir mis à niveau vers MacOS BigSur. Je l'ai corrigé après avoir fait Brew Update


0 commentaires

35
votes

J'ai eu le même problème que j'ai remarqué lors de la mise à jour de mes fichiers DOT.

Sur le M1, je suis passé de Intel Brew à Intel et Arm Brew puis à la version ARM. Le problème pour moi a été causé par deux liens symboliques pointant vers la version Intel, qui n'existait plus, et non la version ARM.

Je l'ai réparée en modifiant les liens symboliques pour pointer vers les bons emplacements pour le Version du bras.

lrwxr-xr-x    35 xxxx  2 Jun 16:02  _brew -> /opt/homebrew/completions/zsh/_brew
lrwxr-xr-x    35 xxxx  2 Jun 16:01  _brew_cask -> /opt/homebrew/completions/zsh/_brew

Ainsi

ln -fsv /opt/homebrew/completions/zsh/_brew /usr/local/share/zsh/site-functions/_brew

ln -fsv /opt/homebrew/completions/zsh/_brew /usr/local/share/zsh/site-functions/_brew_cask

Je pense que _Brew_cask pointant vers le même _brew est correct car les fûts ont été fusionnés.


11 commentaires

manquer un - pour des fonctions de site dans la première ligne


Fonctionnait pour moi. (et oui - est manquant)


J'ai corrigé la faute de frappe, devrait être bon à partir. Merci pour la réponse.


Merci d'avoir corrigé. Heureux que cela ait aidé certaines personnes. Oui, certains fois sur Mac, un double trait d'union est transformé en trait d'union à double largeur, je n'ai pas encore découvert la cause probablement un outil tiers. Je vais jeter un œil cet après-midi.


Heck ouais, belle trouvaille! Correction de moi sur mon M1.


Cela a fonctionné pour moi. Je me demande toujours pourquoi compinit chercherait le contenu dans / usr / local / share / . J'ai vérifié echo $ fpath et il y a / usr / local / share / zsh / site-functions après le bras de bras / opt / homebrew / share / zsh- complétions . Je n'ai aucune idée de quand et où FPATH devait inclure les anciens chemins.


@EdwardToday pas sûr. Cependant, Brew a eu de nombreuses versions depuis. Ces liens ont été définis par Brews Installation IIRC Le problème a été causé par le passage de la version architecture I386 à ARM64 de Brew ou en essayant d'utiliser les deux, vous ne pouvez avoir qu'un seul ensemble de liens symboliques à la fois. Je pense que Zsh établit des FPATH.


Homebrew Zsh est compilé à l'aide des répertoires Homebrew ( Les fonctions sont également utilisées avec les compléments. Je pense qu'ils pourraient probablement utiliser des FPATH par eux-mêmes ces jours-ci? Mais peut-être que les liens symboliques sont destinés à la compatibilité en arrière.


Brew Cleanup n'a pas non plus résolu le problème au moment du poste


Cela devrait être la réponse acceptée pour M1. Brew Cleanup n'a pas fonctionné, du moins pour moi.



15
votes

@ La réponse de Sinestandly ci-dessus a fonctionné pour moi après l'échec des autres méthodes. J'ai exécuté Brew installer Zsh-Completions puis Brew Cleanup . Le Cleanup a arrêté des erreurs de lancer et je n'obtiens plus le message d'erreur Compinit: 503: Aucun fichier ou répertoire: / usr / local / share / zsh / site-fonctions / _Brew_Cask .

Merci, @Sinestandly!


2 commentaires

J'ai été migré d'Intel vers Apple Silicon (M1) et ceux-ci ont résolu le problème. Merci! Brew installer zsh-completions Brew Cleanup


Fonctionné parce que Zsh-Completions recrée en fait des liens symboliques pour _Brew qui est le même donné dans ma réponse en remplacement des liens manquants ou incorrects. Cependant, puisque les liens symboliques _Brew ont été supprimés des complétions Zsh, il utilise simplement des FPATH. Il a également supprimé d'autres fonctionnalités car il ne faisait que dupliquer ce que Brew a fait. Juste au cas où quelqu'un aurait trouvé que cela ne fonctionnerait pas comme prévu.



1
votes

Tous les achèvement des homebrew ont été rompus dans mon cas, fonctionnant sur Apple Silicon. Le passage de / usr / local vers / opt / homebrew dans Homebrew 3.0.0 semble être le problème.

J'ai ajouté le nouveau répertoire à fpath dans ~ / .zshrc comme SO:

HOMEBREW_PREFIX=$(brew --prefix)
export FPATH="${HOMEBREW_PREFIX}/share/zsh/site-functions:${FPATH}"

Si exécuté oh-my-zsh, les lignes doivent aller au-dessus de la ligne Cela s'approvisionne OMZ, car il fait de la magie d'achèvement qui lui est propre. N'oubliez pas non plus de nettoyer vos fichiers .zcomdump, qui seront recréés.


1 commentaires

Merci! Cela fonctionne parfaitement. Un ajout est que vous devez ajouter l'évalue qui charge Brew ( eval "$ (/ opt / homebrew / bin / brasse shelalenv)" ) avant les deux lignes répertoriées dans la réponse.



0
votes

a obtenu le problème similaire avec un autre chemin, même pas mentionné dans mon .zshrc

en cours d'exécution Brew Update && Brew Medgrade résolu ce.


0 commentaires