67 votes

Ma ligne de commande indique `complete:13 : command not found : compdef `

Lorsque j'utilise un terminal comme iTerm ou Hyper, dès le démarrage, le premier message que j'obtiens est le suivant :

complete:13: command not found: compdef

Je ne sais pas de quoi il s'agit et comment m'en débarrasser. Ce message n'apparaît pas dans l'application terminal par défaut.

J'utilise zsh.

109voto

GOPESH CHAUDHARY Points 741

C'est le même problème que j'ai rencontré sur mon Mac OS. J'utilise le shell zsh.

Zsh Compdef error

Compdef est une fonction utilisée par zsh pour charger les autocomplétions. Le système de complétion doit être activé. Si vous utilisez quelque chose comme oh-my-zsh alors c'est déjà fait, sinon vous devrez ajouter ce qui suit à votre ~/.zshrc

autoload -Uz compinit
compinit

Les fonctions d'achèvement peuvent être enregistrées manuellement en utilisant directement la fonction compdef comme ceci compdef . Mais compinit doit être chargé automatiquement dans le contexte avant d'utiliser compdef.

25voto

aaron Points 723

Après de nouvelles recherches, j'ai trouvé ma réponse. Il y avait un blocage dans mon fichier .zprofile :

export NVM_DIR="/Users/Aaron/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

La dernière ligne charge compdef, mais en faisant cela, il y a eu une sorte de conflit. Tout ce que j'avais à faire était de commenter :

# [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

Et l'erreur gênante a disparu. Et le meilleur : J'ai toujours la complétion des tabulations de zsh.

10voto

Mise à jour : Le problème est déjà corrigé dans les versions plus récentes de nvm. Mettez à jour nvm en utilisant l'installation script et l'erreur devrait disparaître (testé avec la v0.37.2).

J'ai eu le même problème, après quelques recherches j'ai trouvé que la racine du problème était un extrait de code nvm dans le fichier .zshrc (qui pourrait aussi être .zprofile).

export NVM_DIR="/Users/Aaron/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

Comme suggéré dans une autre réponse, commenter la troisième ligne résout le problème, mais, surprise, la complétion bash pour les commandes nvm ne sera plus disponible.

Le vrai problème se situe à la fin de la bash_completion script :

# complete is a bash builtin, but recent versions of ZSH come with a function
# called bashcompinit that will create a complete in ZSH. If the user is in
# ZSH, load and run bashcompinit before calling the complete function.
if [[ -n ${ZSH_VERSION-} ]]; then
  autoload -U +X bashcompinit && bashcompinit
fi

Mais pour appeler bashcompinit, compinit doit avoir été appelé auparavant, ce qui n'est pas le cas pour l'instant. (Je pense que cela devrait/pourrait être corrigé dans le nvm script, je vais créer un problème sur github).

Si vous voulez avoir la complétion nvm, vous pouvez simplement appeler compinit vous-même avant que le script ne s'exécute.

autoload -Uz compinit
compinit -i

export NVM_DIR="/Users/Aaron/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

L'option -i indique à compinit d'ignorer silencieusement tous les fichiers et répertoires non sécurisés, ce qui peut éviter d'autres erreurs à l'avenir.

1voto

Lev Points 143

J'ai également reçu cette erreur, mais j'ai eu une solution différente.

Mon fichier .zshrc contenait ceci :

# Setup Kubectl completion
if [ /usr/local/bin/kubectl ]; then source <(kubectl completion zsh); fi

# The next line enables shell command completion for gcloud.
if [ -f '/Users/my-user-name/google-cloud-sdk/completion.zsh.inc' ]; then . '/Users/my-user-name/google-cloud-sdk/completion.zsh.inc'; fi

J'avais besoin de placer la partie complétion de kubectl APRES avoir exécuté le script completion.zsh.inc script :

# The next line enables shell command completion for gcloud.
if [ -f '/Users/my-user-name/google-cloud-sdk/completion.zsh.inc' ]; then . '/Users/my-user-name/google-cloud-sdk/completion.zsh.inc'; fi

# Setup Kubectl completion
if [ /usr/local/bin/kubectl ]; then source <(kubectl completion zsh); fi

0voto

LаngLаngС Points 7522

Cela dépend de ce que vous avez défini comme shell par défaut pour le système, pour Terminal, pour iTerm. Mise à jour bash installé et configuré pour s'exécuter dans l'un d'entre eux donne des résultats différents.

Cette erreur provient d'un fichier dit "point" que vous avez installé. Il s'agit de fichiers précédés d'un point (d'où leur nom), tels que .bashrc . Cela signifie qu'ils sont invisibles dans le Finder et pour un simple ls . Les fichiers point en question sont lus par votre shell lorsqu'il démarre. Ils contiennent des instructions, des paramètres, des personnalisations, voire de petits bouts de code.

Tous les fichiers point du répertoire personnel de l'utilisateur ne sont pas lus par l'interpréteur de commandes. Ceux qui sont lus par bash peuvent inclure : .bash_history .bash_profile .bash_prompt .bash_sessions .bashrc .editorconfig .exports .functions .inputrc .profile (Cette liste n'est pas exhaustive)

Ces fichiers peuvent avoir été créés par vous, manipulés par vous ou par certains programmes tels que fink, homebrew ou ports. Vous avez peut-être simplement copié ces fichiers sur le net pour "mettre à jour"/personnaliser votre shell.

Quelle que soit la manière dont vous êtes arrivé à la situation actuelle. Ouvrez votre Terminal/iTerm à partir d'un autre utilisateur et les symptômes ne seront probablement pas observés.

Cela signifie que tous ces fichiers sont en quelque sorte "sûrs à supprimer" : dans le sens où ils ne sont pas essentiels au fonctionnement de votre terminal ou de votre shell. Faites une sauvegarde de ces fichiers au cas où ils contiendraient des paramètres personnalisés dont vous pourriez dépendre dans votre travail quotidien. Il peut s'agir, par exemple, d'ajouts à votre $PATH variables. Sans ces variables, des programmes comme fink risquent de ne plus fonctionner.

Cependant, le message d'erreur que vous avez affiché indique deux choses :

  • Le contenu combiné de vos fichiers point n'a pas permis d'accomplir ce qu'il était censé faire. Plus exactement : une instruction (compdef) a été appelée et n'est pas disponible.

  • Il est très probable que vous ayez obtenu une série de fichiers point à partir d'une source sur le net telle que holman-dotfiles . Il s'agissait notamment d'un bogue qui présentait exactement le même message d'erreur.

Vous devriez donc passer en revue tous les fichiers dot de votre utilisateur actuel et ne conserver que les éléments que vous jugez nécessaires (n'oubliez pas les sauvegardes). Vous pourrez ensuite utiliser à nouveau les fichiers mis à jour à partir de votre source. Mais gardez à l'esprit que ces fichiers sont assez "complets". Il serait prudent de ne pas les utiliser toutes aveuglément et de tester et choisir un sous-ensemble de toutes ces options.

Les utiliser tous aveuglément ou sans discernement peut non seulement entraîner des problèmes comme celui qui motive cette question, mais aussi lorsque l'on suit d'autres modes d'emploi ou conseils de dépannage.

Mise à jour : Cette réponse a été donnée à une version précédente de la question qui n'indiquait pas zsh comme shell utilisé. -> Substituez zsh à la place de bash ci-dessus.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X