67 votos

Mi línea de comandos dice `completo:13: comando no encontrado: compdef `

Cuando uso un terminal como iTerm o Hyper, justo al arrancarlo, el primer mensaje que me aparece es:

complete:13: command not found: compdef

No sé de qué es esto y cómo deshacerse de él. Sin embargo, este mensaje no aparece en la aplicación de terminal por defecto.

Estoy usando zsh.

0 votos

107voto

Ananya Puntos 165

Este es el mismo problema que tengo en mi mac OS. Estoy usando zsh shell.

Zsh Compdef error

Compdef es básicamente una función utilizada por zsh para cargar las autocompletaciones. El sistema de completado necesita ser activado. Si estás usando algo como oh-my-zsh entonces esto ya está resuelto, de lo contrario tendrá que añadir lo siguiente a su ~/.zshrc

autoload -Uz compinit
compinit

Las funciones de finalización se pueden registrar manualmente utilizando la función compdef directamente como esta compdef . Pero compinit necesita ser autocargado en el contexto antes de usar compdef.

0 votos

Esto me ha funcionado. En mi sistema, fue causado por la adición de la terminación para el "flux" cli. Añadiendo estas líneas antes de los comandos "flux" se solucionó el problema. Parece que esta debería ser la respuesta aceptada.

25voto

Después de investigar más, he encontrado la respuesta. Había un bloqueo en mi .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 última línea carga compdef. Pero al hacer esto causó algún tipo de conflicto. Todo lo que tenía que hacer era comentar:

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

Y el molesto error desapareció. Y la mejor parte: Todavía tengo la terminación de la pestaña zsh.

0 votos

Ese era exactamente mi problema también, gracias.

10voto

rolinger Puntos 11

Actualización: El problema ya está solucionado en las nuevas versiones de nvm. Actualice nvm usando el install script y el error debería desaparecer (probado con v0.37.2)

Tuve el mismo problema, después de algunas investigaciones encontré que root del problema era un fragmento de código nvm en el archivo .zshrc (también podría ser .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"

Como se sugirió en otra respuesta, comentar la tercera línea resuelve el problema, pero, sorpresa, la finalización de bash para los comandos nvm ya no estará disponible.

El verdadero problema está al final 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

Pero para llamar a bashcompinit, compinit debe haber sido llamado antes y en este momento no lo es. (Creo que esto debería/podría arreglarse en el nvm script, crearé un issue en github).

Si quieres tener una finalización nvm, puedes llamar tú mismo a compinit antes de que se ejecute el script.

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"

La opción -i indica a compinit que ignore silenciosamente todos los archivos y directorios inseguros, lo que podría evitar más errores en el futuro.

1voto

Yo también recibí este error, pero tuve una solución diferente.

Mi archivo .zshrc tenía esto:

# 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

Necesitaba colocar la parte de finalización de kubectl DESPUÉS de ejecutar el 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

0 votos

Estos no se atascan si inicializo un nuevo terminal... ¿Hay alguna razón?

0voto

Pickle Puntos 2099

Depende de lo que establezcas como (login-)shell por defecto para el sistema, para Terminal, para iTerm. Actualizado bash instalado y configurado para ejecutarse en uno de ellos da resultados diferentes.

Este error proviene de un archivo llamado "punto" que has instalado. Son archivos con un punto delante (de ahí el nombre) como .bashrc . Esto significa que son invisibles para el Finder y para un simple ls . Los archivos de puntos en cuestión son leídos por su shell cuando se inicia. Contienen instrucciones, configuraciones, personalizaciones; tal vez pequeños fragmentos de código de programa.

No todos los archivos de puntos en el directorio personal de los usuarios son leídos por el shell. Aquellos leídos por bash pueden incluir: .bash_history .bash_profile .bash_prompt .bash_sessions .bashrc .editorconfig .exports .functions .inputrc .profile (Esta lista no es exhaustiva)

Esos archivos pueden haber sido creados por ti, manipulados por ti o por ciertos programas como fink, homebrew o ports. Puede que simplemente los hayas copiado de la red para "actualizar"/personalizar tu shell.

Independientemente de cómo haya llegado a la situación actual. Abra su Terminal/iTerm desde otro usuario y probablemente no se observarán los síntomas.

Esto significa que todos esos archivos son, en cierto sentido, "seguros de borrar": en el sentido de que no son esenciales para el funcionamiento de su Terminal o su shell. Haz una copia de seguridad de ellos en caso de que contengan configuraciones personalizadas de las que puedas depender en tu trabajo diario. Ejemplos de ello son las adiciones a su $PATH variables. Sin ellas, es posible que programas como Fink dejen de funcionar.

Sin embargo, el mensaje de error que has publicado indica dos cosas:

  • El contenido combinado de sus archivos de puntos no funcionó para lograr lo que se suponía que debían hacer. Más exacto: se llamó a una instrucción (compdef) que no está disponible.

  • Que muy probablemente has sacado un montón de archivos de puntos de una fuente en la red como holman-dotfiles . Entre ellos se encontraba un error que tenía exactamente el mismo mensaje de error.

Por lo tanto, debería revisar todos los archivos punto para su usuario actual y conservar sólo lo que reconozca como necesario (recuerde las copias de seguridad). Luego, podría utilizar los archivos actualizados de su fuente de nuevo. Pero ten en cuenta que estos son bastante "completos". Sería prudente no usarlos todos a ciegas y realmente probar y elegir un subconjunto de todas esas opciones.

Utilizarlos todos a ciegas o de forma indiscriminada no sólo puede dar lugar a problemas como el que ha motivado esta pregunta, sino también a la hora de seguir otros consejos sobre cómo solucionar problemas.

Actualización: Esta respuesta fue dada a una versión anterior de la pregunta que no indicaba zsh como el shell utilizado. -> Sustituir zsh donde se lee bash arriba.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X