La mia riga di comando dice 'completa: 13: comando non trovato: compdef'

5

Quando uso un terminale come iTerm o Hyper, appena lo avvio, il primo messaggio che ricevo è:

complete:13: command not found: compdef

Non so di cosa si tratta, e come liberarmene. Tuttavia, questo messaggio non viene visualizzato nell'app terminale predefinita.

Sto usando zsh.

    
posta aaron 27.08.2017 - 02:07
fonte

3 risposte

5

Dopo ulteriori ricerche, ho trovato la mia risposta. C'era un blocco nel mio .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"

L'ultima riga carica compdef. Ma nel fare ciò ha causato una sorta di conflitto. Tutto quello che dovevo fare era commentare:

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

E l'errore fastidioso è andato via. E la parte migliore: ho ancora il completamento della scheda zsh.

    
risposta data 27.08.2017 - 13:43
fonte
4

Questo è lo stesso problema che ho riscontrato sul mio Mac OS. Sto usando la shell di zsh.

Compdef è fondamentalmente una funzione utilizzata da zsh per caricare i completamenti automatici. Il sistema di completamento deve essere attivato. Se stai utilizzando qualcosa come oh-my-zsh , questo è già stato risolto, altrimenti dovrai aggiungere quanto segue al tuo ~ / .zshrc

autoload -Uz compinit
compinit

Le funzioni di completamento possono essere registrate manualmente usando la funzione compdef direttamente come questo compdef. Ma compinit deve essere caricato automaticamente nel contesto prima di usare compdef.

    
risposta data 26.10.2018 - 09:39
fonte
0

Dipende da ciò che imposti come shell predefinita (login-) per il sistema, per Terminal, per iTerm. Aggiornato bash installato e impostato per l'esecuzione in uno di essi dà risultati diversi.

Questo errore proviene da un cosiddetto dot-file installato. Questi sono file con un punto in primo piano (da cui il nome) come .bashrc . Ciò significa che sono invisibili al Finder e ad un semplice ls . I file di punti in questione vengono letti dalla shell all'avvio. Contengono istruzioni, impostazioni, personalizzazioni; forse piccoli frammenti di codice del programma.

Non tutti i dot-file nella home directory degli utenti vengono letti dalla shell. Quelli letti da bash possono includere: %codice% %codice% %codice% %codice% %codice% %codice% %codice% %codice% %codice% .bash_history (questo elenco non è esaustivo)

Questi file potrebbero essere stati creati da te, manipolati da te o da alcuni programmi come fink, homebrew o porte. Potresti aver appena copiato quelli dalla rete per "aggiornare" / personalizzare la tua shell.

Indipendentemente da come sei arrivato alla situazione attuale. Apri il tuo terminale / iTerm da un altro utente e probabilmente i sintomi non saranno rispettati.

Questo significa che tutti questi file sono in un certo senso 'sicuri di eliminare': nel senso che non sono essenziali per l'esecuzione del tuo terminale o della tua shell. Fai un backup di quelli nel caso in cui effettivamente contengono impostazioni personalizzate da cui puoi dipendere nel tuo lavoro quotidiano. Esempi per questo includono aggiunte alle tue variabili .bash_profile . Senza di essi potresti trovare programmi come Fink che non funzionano più.

Tuttavia, il messaggio di errore che hai pubblicato indica due cose:

  • Il contenuto combinato dei tuoi dot-file non funzionava per ottenere ciò che dovevano fare. Più esatto: è stata chiamata un'istruzione (compdef) che non è disponibile.

  • Probabilmente hai trovato alcuni file di punti da una fonte in rete come holman-dotfiles . Questi includevano un bug che aveva lo stesso identico messaggio di errore.

Quindi dovresti esaminare tutti i file di punti per il tuo utente corrente e conservare solo le cose che riconosci come necessario (ricorda i backup). Quindi potresti usare di nuovo i file aggiornati dalla tua fonte. Ma tieni presente che questi sono abbastanza "completi". Sarebbe prudente non usarli tutti alla cieca e in realtà testare e selezionare un sottoinsieme di tutte quelle opzioni.

Usarli tutti in modo cieco o indiscriminato può non solo portare a problemi come quello che richiede questa domanda, ma anche quando si seguono altri consigli o suggerimenti per la risoluzione dei problemi.

Aggiornamento: Questa risposta è stata data a una versione precedente della domanda che non indicava zsh come la shell utilizzata. - > Sostituisci zsh dove leggi sopra bash.

    
risposta data 27.08.2017 - 12:16
fonte

Leggi altre domande sui tag