Pytanie:
W moim wierszu poleceń jest napisane `complete: 13: command not found: compdef`
aaron
2017-08-27 05:07:53 UTC
view on stackexchange narkive permalink

Kiedy używam terminala takiego jak iTerm lub Hyper, zaraz po uruchomieniu go otrzymuję pierwszą wiadomość:

  zakończone: 13: nie znaleziono polecenia: compdef
 

Nie wiem, skąd to pochodzi i jak się go pozbyć.Ta wiadomość nie pojawia się jednak w domyślnej aplikacji terminala.

Używam zsh.

Czy możemy założyć, że Twój $ SHELL to „bash”?
sprawdź swoje ~ / .bashrc i ~ / .bash_profile
@Sairam Te również powinny zostać załadowane w normalnej aplikacji Terminal.[Spojrzę na to.] (Https://apple.stackexchange.com/questions/115598/how-to-set-an-iterm2-startup-command)
Głosuję za zamknięciem, ponieważ zaakceptowanej odpowiedzi i tak nie można było odgadnąć na podstawie pytania.tzn. brak wzmianki o zsh jako powłoce.Nie widzę, jak to pytanie pomaga innym użytkownikom.Odpowiedzi obejmują wiele różnych rzeczy, ponieważ pytanie jest tak ubogie.
@Mark Zgadzam się, że pytanie może wymagać trochę pracy.Ale faktycznie wspomniano o `zsh` i każdy, kto szuka w Google komunikatu o błędzie, może się czegoś nauczyć z odpowiedzi.
Pięć odpowiedzi:
GOPESH CHAUDHARY
2018-10-26 12:39:06 UTC
view on stackexchange narkive permalink

To ten sam problem, który mam w systemie Mac OS.Używam powłoki zsh.

Zsh Compdef error

Compdef jest w zasadzie funkcją używaną przez zsh do ładowania autouzupełniania.System uzupełniania musi zostać aktywowany.Jeśli używasz czegoś takiego jak oh-my-zsh, to jest już załatwione, w przeciwnym razie musisz dodać następujący kod do swojego ~ / .zshrc

  autoload -Uz compinit
compinit
 

Funkcje uzupełniania mogą być rejestrowane ręcznie przy użyciu funkcji compdef, takiej jak ta compdef.Ale compinit musi zostać automatycznie załadowane w kontekście przed użyciem compdef.

Musiałem umieścić go na początku mojego pliku i zakończyć, zanim zadziała.Dziękuję Ci.
aaron
2017-08-27 16:43:06 UTC
view on stackexchange narkive permalink

Po dalszych poszukiwaniach znalazłem odpowiedź.W moim .zprofile była blokada:

  export NVM_DIR = "/ Users / Aaron / .nvm"
[-s "$ NVM_DIR / nvm.sh"] && \."$ NVM_DIR / nvm.sh" # To ładuje nvm
[-s "$ NVM_DIR / bash_completion"] && \.„$ NVM_DIR / bash_completion”
 

Ostatnia linia ładuje compdef.Ale robiąc to, spowodowało to pewien rodzaj konfliktu.Wszystko, co musiałem zrobić, to skomentować:

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

Irytujący błąd zniknął.A najlepsze: nadal mam dokończenie w zsh.

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

To zależy od tego, co ustawisz jako domyślną powłokę (logowania) dla systemu, dla terminala, dla iTerm. Zaktualizowany bash zainstalowany i ustawiony na wykonanie w jednym z nich daje różne wyniki.

Ten błąd pochodzi z tak zwanego pliku z kropką, który zainstalowałeś. Są to pliki z kropką na początku (stąd nazwa), np. .bashrc . Oznacza to, że są niewidoczne dla Findera i prostego ls . Pliki kropek, o których mowa, są odczytywane przez powłokę podczas jej uruchamiania. Zawierają instrukcje, ustawienia, dostosowania; może małe fragmenty kodu programu.

Nie wszystkie pliki z kropkami w katalogu domowym użytkownika są odczytywane przez powłokę. Te czytane przez basha mogą obejmować: .bash_history .bash_profile .bash_prompt .bash_sessions .bashrc .editorconfig .exports .functions .inputrc .profile (ta lista nie jest wyczerpująca)

Te pliki mogły zostać utworzone przez Ciebie, przez Ciebie manipulowane lub przez określone programy, takie jak fink, homebrew lub porty. Być może właśnie skopiowałeś je z sieci, aby "zaktualizować" / spersonalizować swoją powłokę.

Niezależnie od tego, jak doszedłeś do obecnej sytuacji. Otwórz swój Terminal / iTerm od innego użytkownika, a objawy prawdopodobnie nie będą obserwowane.

To znaczy: wszystkie te pliki są w pewnym sensie „bezpieczne do usunięcia”: w tym sensie, że nie są niezbędne do działania terminala lub powłoki. Zrób ich kopię zapasową na wypadek, gdyby rzeczywiście zawierały spersonalizowane ustawienia, na których możesz polegać w codziennej pracy. Przykłady tego obejmują dodatki do zmiennych $ PATH . Bez nich programy takie jak fink mogą już nie działać.

Jednak faktyczny opublikowany komunikat o błędzie wskazuje na dwie rzeczy:

  • Połączona zawartość twoich plików z kropkami nie zadziałała, aby osiągnąć to, co powinny. Dokładniej: wywołano instrukcję (compdef), która nie jest dostępna.

  • Że najprawdopodobniej masz zbiór plików dot-plików ze źródła w sieci, takiego jak holman-dotfiles. Obejmowały one błąd, który miał dokładnie ten sam komunikat o błędzie.

Dlatego powinieneś przejrzeć wszystkie pliki z kropkami dla bieżącego użytkownika i zachować tylko te rzeczy, które rozpoznasz jako konieczne (pamiętaj o kopiach zapasowych).Następnie możesz ponownie użyć zaktualizowanych plików ze źródła.Należy jednak pamiętać, że są one dość „wyczerpujące”.Rozsądnie byłoby nie używać ich wszystkich na ślepo i faktycznie przetestować i wybrać podzbiór wszystkich tych opcji.

Korzystanie z nich wszystkich na ślepo lub bez rozróżnienia może prowadzić nie tylko do problemów, takich jak ten, który powoduje to pytanie, ale także podczas stosowania innych instrukcji lub porad dotyczących rozwiązywania problemów.

Aktualizacja: Tej odpowiedzi udzielono poprzedniej wersji pytania, która nie wskazywała zsh jako używanej powłoki.-> Zastąp zsh w miejscu, w którym czytałeś bash powyżej.

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

Również otrzymałem ten błąd, ale miałem inne rozwiązanie.

Mój plik .zshrc miał to:

  # Konfiguracja Kubectl complete
if [/ usr / local / bin / kubectl];następnie źródło < (uzupełnienie kubectl zsh);fi

# Następny wiersz włącza uzupełnianie poleceń powłoki dla gcloud.
if [-f '/Users/my-user-name/google-cloud-sdk/completion.zsh.inc'];następnie .„/Users/my-user-name/google-cloud-sdk/completion.zsh.inc”;fi
 

Musiałem umieścić część uzupełniającą kubectl PO wykonaniu skryptu Complete.zsh.inc:

  # Następna linia włącza uzupełnianie poleceń powłoki dla gcloud.
if [-f '/Users/my-user-name/google-cloud-sdk/completion.zsh.inc'];następnie .„/Users/my-user-name/google-cloud-sdk/completion.zsh.inc”;fi

# Zakończenie konfiguracji Kubectl
if [/ usr / local / bin / kubectl];następnie źródło < (uzupełnienie kubectl zsh);fi
 
xiaojueguan
2020-07-19 09:20:50 UTC
view on stackexchange narkive permalink

należy dodać poniżej

  autoload -Uz compinit
compinit -i
 

powyżej linii przyczyny komunikatu o błędzie



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...