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

5

Cuando uso un terminal como iTerm o Hyper, justo cuando lo inicio, el primer mensaje que recibo es:

complete:13: command not found: compdef

No sé de qué se trata y cómo deshacerme de él. Sin embargo, este mensaje no aparece en la aplicación de terminal predeterminada.

Estoy usando zsh.

    
pregunta aaron 27.08.2017 - 02:07

3 respuestas

5

Después de más investigación, he encontrado mi respuesta. Había un bloque 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 necesitaba hacer era comentar:

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

Y el molesto error desapareció. Y lo mejor de todo: todavía tengo que completar la pestaña zsh.

    
respondido por el aaron 27.08.2017 - 13:43
3

Este es el mismo problema que tuve en mi sistema operativo mac. Estoy usando la shell zsh.

Compdef es básicamente una función utilizada por zsh para cargar las finalizaciones automáticas. El sistema de finalización debe ser activado. Si estás usando algo como oh-my-zsh , entonces esto ya está resuelto, de lo contrario, deberás agregar lo siguiente a tu ~ / .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 contexto antes de usar compdef.

    
respondido por el GOPESH CHAUDHARY 26.10.2018 - 09:39
0

Depende de lo que establezcas como tu shell predeterminado (inicio de sesión) para el sistema, para Terminal, para iTerm. El bash instalado y configurado para ejecutarse en uno de ellos da resultados diferentes.

Este error proviene de un llamado archivo de puntos que instaló. Estos son archivos con un punto al frente (de ahí el nombre) como .bashrc . Eso significa que son invisibles para el Finder y para un simple ls . Tu shell lee los archivos de puntos en cuestión cuando se inicia. Contienen instrucciones, ajustes, personalizaciones; tal vez pequeños fragmentos de código de programa.

El shell no lee todos los archivos de puntos del directorio de inicio de sus usuarios. Los leídos por bash pueden incluir: %código% %código% %código% %código% %código% %código% %código% %código% %código% .bash_history (esta lista no es exhaustiva)

Esos archivos pueden haber sido creados por usted, manipulados por usted o por ciertos programas como fink, homebrew o ports. Es posible que haya copiado los de la red para "actualizar" / personalizar su shell.

Independientemente de cómo llegó a la situación actual. Abra su Terminal / iTerm de otro usuario y es probable que no se observen los síntomas.

Eso significa que: todos esos archivos son, en cierto sentido, "seguros de eliminar": en el sentido de que no son esenciales para ejecutar tu Terminal o tu shell. Realice una copia de seguridad de esos en caso de que realmente contengan configuraciones personalizadas de las que pueda depender en su trabajo diario. Los ejemplos para eso incluyen adiciones a sus variables .bash_profile . Sin ellos, es posible que encuentres programas como fink que ya no funcionan.

Sin embargo, el mensaje de error real que publicaste indica dos cosas:

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

  • Es muy probable que haya obtenido un montón de archivos de puntos de una fuente en la red como holman-dotfiles . Estos incluían un error que tenía exactamente el mismo mensaje de error.

Por lo tanto, debe revisar todos los archivos de puntos de su usuario actual y guardar solo las cosas que reconozca que sean necesarias (recuerde las copias de seguridad). Entonces podrías usar los archivos actualizados de tu fuente nuevamente. Pero tenga en cuenta que estos son bastante "completos". Sería prudente no usarlos todos a ciegas y, de hecho, probar y elegir un subconjunto de todas esas opciones.

El uso de todos ellos a ciegas o indiscriminadamente no solo puede llevar a problemas como el que plantea esta pregunta, sino también a la hora de seguir otros consejos o consejos para la solución de problemas.

Actualizar: Esta respuesta se dio a una versión anterior de la pregunta que no indicaba zsh como el shell utilizado. - > Sustituye a zsh donde lees a bash arriba.

    
respondido por el LangLangC 27.08.2017 - 12:16

Lea otras preguntas en las etiquetas