Frage:
Meine Befehlszeile lautet "complete: 13: Befehl nicht gefunden: compdef"
aaron
2017-08-27 05:07:53 UTC
view on stackexchange narkive permalink

Wenn ich ein Terminal wie iTerm oder Hyper verwende, wird beim ersten Start die erste Meldung angezeigt:

  complete: 13: Befehl nicht gefunden: compdef
 

Ich weiß nicht, woraus das besteht und wie ich es loswerden kann.Diese Meldung wird in der Standard-Terminal-App jedoch nicht angezeigt.

Ich verwende zsh.

Können wir annehmen, dass Ihre $ SHELL "bash" ist?
Überprüfen Sie Ihr ~ / .bashrc- und ~ / .bash_profile
@Sairam Diese sollten jedoch auch in der normalen Terminal-App geladen werden.[Ich würde mir das mal ansehen.] (Https://apple.stackexchange.com/questions/115598/how-to-set-an-iterm2-startup-command)
Ich stimme zu schließen, da die akzeptierte Antwort ohnehin nicht aus der Frage erraten werden konnte.dh keine Erwähnung von zsh als Shell.Ich sehe nicht, wie diese Frage anderen Benutzern hilft.Die Antworten decken viele verschiedene Dinge ab, da die Frage so schlecht ist.
@Mark Ich stimme zu, dass die Frage etwas Arbeit erfordern könnte.Aber "zsh" wird tatsächlich erwähnt, und jeder, der nach der Fehlermeldung googelt, kann etwas aus der Antwort lernen.
Fünf antworten:
GOPESH CHAUDHARY
2018-10-26 12:39:06 UTC
view on stackexchange narkive permalink

Dies ist das gleiche Problem, das ich auf meinem Mac OS hatte.Ich verwende die zsh-Shell.

Zsh Compdef error

Compdef ist im Grunde eine Funktion, die von zsh zum Laden der automatischen Vervollständigungen verwendet wird.Das Vervollständigungssystem muss aktiviert sein.Wenn Sie so etwas wie oh-my-zsh verwenden, ist dies bereits erledigt. Andernfalls müssen Sie Ihrem ~ / .zshrc

Folgendes hinzufügen
  autoload -Uz compinit
compinit
 

Abschlussfunktionen können manuell registriert werden, indem die compdef-Funktion direkt wie diese compdef verwendet wird.Compinit muss jedoch im Kontext automatisch geladen werden, bevor compdef verwendet werden kann.

Ich musste es oben in meine Datei einfügen und beenden, bevor es funktionierte.Vielen Dank.
aaron
2017-08-27 16:43:06 UTC
view on stackexchange narkive permalink

Nach weiteren Recherchen habe ich meine Antwort gefunden.In meinem .z-Profil war ein Block:

  export NVM_DIR = "/ Users / Aaron / .nvm"
[-s "$ NVM_DIR / nvm.sh"] && \."$ NVM_DIR / nvm.sh" # Dies lädt nvm
[-s "$ NVM_DIR / bash_completion"] && \."$ NVM_DIR / bash_completion"
 

Die letzte Zeile lädt compdef.Aber dabei kam es zu Konflikten.Ich musste nur Folgendes auskommentieren:

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

Und der nervige Fehler ging weg.Und das Beste daran: Ich habe immer noch die Fertigstellung der zsh-Registerkarte.

LаngLаngС
2017-08-27 15:16:26 UTC
view on stackexchange narkive permalink

Dies hängt davon ab, was Sie als Standard- (Anmelde-) Shell für das System, für Terminal und für iTerm festgelegt haben. Aktualisierte bash installiert und so eingestellt, dass sie in einem von ihnen ausgeführt werden, führen zu unterschiedlichen Ergebnissen.

Dieser Fehler stammt von einer sogenannten Punktdatei, die Sie installiert haben. Dies sind Dateien mit einem Punkt vor (daher der Name) wie .bashrc . Das heißt, sie sind für den Finder und für einen einfachen ls unsichtbar. Die betreffenden Punktedateien werden beim Start von Ihrer Shell gelesen. Sie enthalten Anweisungen, Einstellungen, Anpassungen; vielleicht kleine Ausschnitte aus dem Programmcode.

Nicht alle Punktdateien im Home-Verzeichnis Ihres Benutzers werden von der Shell gelesen. Diejenigen, die von Bash gelesen werden, können sein: .bash_history .bash_profile .bash_prompt .bash_sessions .bashrc .editorconfig .exports .funktionen .inputrc .profile (Diese Liste ist nicht vollständig)

Diese Dateien wurden möglicherweise von Ihnen erstellt, von Ihnen oder bestimmten Programmen wie Fink, Homebrew oder Ports bearbeitet. Möglicherweise haben Sie diese gerade aus dem Internet kopiert, um Ihre Shell zu "aktualisieren" / zu personalisieren.

Unabhängig davon, wie Sie zur aktuellen Situation gekommen sind. Öffnen Sie Ihr Terminal / iTerm von einem anderen Benutzer und die Symptome werden wahrscheinlich nicht beobachtet.

Das bedeutet: Alle diese Dateien sind in gewisser Weise "sicher zu löschen": in dem Sinne, dass sie für die Ausführung Ihres Terminals oder Ihrer Shell nicht unbedingt erforderlich sind. Erstellen Sie eine Sicherungskopie dieser Einstellungen, falls sie tatsächlich personalisierte Einstellungen enthalten, auf die Sie bei Ihrer täglichen Arbeit angewiesen sein können. Beispiele hierfür sind Ergänzungen zu Ihren Variablen $ PATH . Ohne diese funktionieren Programme wie fink möglicherweise nicht mehr.

Die tatsächliche Fehlermeldung, die Sie veröffentlicht haben, weist jedoch auf zwei Dinge hin:

  • Der kombinierte Inhalt Ihrer Punktedateien hat nicht funktioniert, um das zu erreichen, was sie tun sollten. Genauer gesagt: Eine Anweisung (compdef) wurde aufgerufen und ist nicht verfügbar.

  • Dass Sie höchstwahrscheinlich eine Reihe von Punktedateien aus einer Quelle im Internet wie holman-dotfiles bezogen haben. Dazu gehörte ein Fehler mit genau der gleichen Fehlermeldung.

Sie sollten also alle Punktedateien für Ihren aktuellen Benutzer durchsuchen und nur die Dinge behalten, die Sie als notwendig erkennen (denken Sie an die Backups).Dann können Sie die aktualisierten Dateien aus Ihrer Quelle erneut verwenden.Aber denken Sie daran, dass diese ziemlich "umfassend" sind.Es wäre ratsam, sie nicht alle blind zu verwenden und tatsächlich eine Teilmenge all dieser Optionen zu testen und auszuwählen.

Wenn Sie alle blind oder wahllos verwenden, kann dies nicht nur zu Problemen wie dem führen, das diese Frage aufwirft, sondern auch, wenn Sie andere Anleitungen oder Ratschläge zur Fehlerbehebung befolgen.

Update: Diese Antwort wurde auf eine frühere Version der Frage gegeben, in der zsh nicht als verwendete Shell angegeben wurde.-> Ersetzen Sie zsh durch Bash oben.

jersey bean
2020-01-28 04:50:37 UTC
view on stackexchange narkive permalink

Ich habe diesen Fehler auch erhalten, aber ich hatte eine andere Lösung.

Meine .zshrc-Datei hatte Folgendes:

  # Kubectl-Abschluss einrichten
if [/ usr / local / bin / kubectl];dann Quelle < (kubectl Vervollständigung zsh);fi

# Die nächste Zeile aktiviert die Vervollständigung des Shell-Befehls für gcloud.
if [-f '/Users/my-user-name/google-cloud-sdk/completion.zsh.inc'];dann .'/Users/my-user-name/google-cloud-sdk/completion.zsh.inc';fi
 

Ich musste den kubectl-Vervollständigungsteil NACH dem Ausführen des Skripts finish.zsh.inc platzieren:

  # In der nächsten Zeile wird die Vervollständigung des Shell-Befehls für gcloud aktiviert.
if [-f '/Users/my-user-name/google-cloud-sdk/completion.zsh.inc'];dann .'/Users/my-user-name/google-cloud-sdk/completion.zsh.inc';fi

# Kubectl-Abschluss einrichten
if [/ usr / local / bin / kubectl];dann Quelle < (kubectl Vervollständigung zsh);fi
 
xiaojueguan
2020-07-19 09:20:50 UTC
view on stackexchange narkive permalink

sollten Sie unten hinzufügen

  autoload -Uz compinit
compinit -i
 

über der Ursachenzeile Ihrer Fehlermeldung



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...