Skip to content

macos – My command line says `complete:13: command not found: compdef `

  • by
Spread the love

Update: The issue is already fixed in newer versions of nvm. Update nvm using the install script and the error should go away (tested with v0.37.2)

I had the same problem, after some research I found that the root of the issue was a nvm code snippet in the .zshrc (could also be .zprofile) file.

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

Like suggested in another answer, commenting the third line does solve the issue, but, surprise surprise, bash completion for nvm commands will not be available anymore.

The real problem is at the end of the 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

But to call bashcompinit, compinit must have been called before and at this time it isn‘t. (I think this should/could be fixed in the nvm script, I will create an issue on github.)

If you want to have nvm completion, you can just call compinit yourself before the script runs.

autoload -Uz compinit
compinit -i

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

The -i option tells compinit to silently ignore all insecure files and directories, which might prevent further errors in the future.

Leave a Reply

Your email address will not be published. Required fields are marked *