nie znaleziono poleceń w zsh

150

Używam powłoki z ( zsh) zamiast domyślnego basha i stało się coś nie tak, że wszystkie polecenia, które działały, nie są już rozpoznawane:

ls
zsh: command not found: ls

open -e .zshrc
zsh: correct 'open' to '_open' [nyae]? 

Nie wiem, jak zresetować zshlub jak to naprawić. Oto zawartość $PATHzmiennej:

echo $PATH
/Users/Malloc/bin/Sencha/Cmd/3.1.2.342:/usr/local/bin/mate

Nie mogę otworzyć .bash_profilepliku ani .zshrcpliku, wydaje się, że jedynym rozwiązaniem jest zresetowanie pliku zsh. Jakieś pomysły?

EDYTOWAĆ:

Próbowałem nawet zresetować, zshjak wskazano w tym wątku , ale zawsze otrzymywałem command not foundbłąd:

exec zsh
zsh: command not found: zsh

więc co się dzieje? dlaczego wszystkie polecenia są stracone?

Malloc
źródło

Odpowiedzi:

239

Jest oczywiste, że udało Ci się zepsuć swoją PATHzmienną. (Twój obecny PATHnie zawiera żadnej lokalizacji, w której znajdują się typowe narzędzia).

Próbować:

PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
export PATH

Alternatywnie, aby „zresetować” zsh, podaj pełną ścieżkę do powłoki:

exec /bin/zsh

lub

exec /usr/bin/zsh
devnull
źródło
17
Po przejściu na Catalinę przełączyłem się na powłokę zsh i zepsuło to moje ścieżki do punktu, w którym nie mogłem uruchomić żadnych aplikacji innych firm, których używam. Musiałem tylko zmodyfikować plik .zshrc i dodać „Export PATH = << lokalizacja moich pojemników >>” i wykonałem exec / bin / zsh i wszystko było dobrze.
Robert Walters
@devnull Wielkie dzięki za tę odpowiedź
Hussain K
18

W pliku konfiguracyjnym ~ / .zsh umieść ścieżkę do pliku ścieżki bash, który zawiera aliasy. W moim przypadku była to linia „source ~ / .bash_profile” wewnątrz ~ / .zsh.

dsteplight
źródło
1
Wielkie dzięki, rozwiązał to za mnie. Miałem problem po aktualizacji do Cataliny i przełączeniu na powłokę zsh.
neiya
1
Nie mam ~/.zshpliku. Zamiast tego musiałem to włożyć /etc/zshrc.
Chase Roberts
15
  1. Użyj dobrego edytora tekstu, takiego jak VS Code, i otwórz .zshrcplik (powinien znajdować się w katalogu domowym. Jeśli go nie widzisz, kliknij prawym przyciskiem myszy folder plików podczas otwierania i wybierz opcję `` pokaż ukryte pliki '') .

  2. znajdź, gdzie jest napisane: export PATH=a-bunch-of-paths-separated-by-colons:

  3. wstaw to na końcu wiersza, przed końcowym cudzysłowem: :$HOME/.local/bin

I to powinno działać dla Ciebie.

Możesz najpierw sprawdzić, czy to zadziała, wpisując najpierw w terminalu: export PATH=$HOME/.local/bin:$PATH

Jeśli błąd zniknie po wpisaniu tego w terminalu, a terminal będzie działał normalnie, powyższe rozwiązanie zadziała. Jeśli tak się nie stanie, musisz znaleźć folder, w którym znajduje się błąd odniesienia (rzecz nie została znaleziona) i zamienić powyższą ŚCIEŻKĘ na ŚCIEŻKĘ DO TEGO FOLDERU.

Jeremiah McCurdy
źródło
Aha, na tym polega mój błąd, który doprowadził zsh do najwyraźniej „zignorowania” mojego PATHustawienia. Od basha byłem przyzwyczajony do prefiksowania katalogów w moim folderze domowym za pomocą ~. Więc okazuje się, że dla zsh powinienem zamiast tego używać $HOMEzmiennej, jak w twoim przykładzie.
lalilulelost
7

Możesz utworzyć łącze symboliczne w / usr / local / bin /

sudo ln -s $HOME/.composer/vendor/bin/homestead /usr/local/bin/homestead
Adel Kihal
źródło
Wielkie dzięki. Miałem problemy i ta odpowiedź uświadomiła mi, że nie używałem $HOMEi nie zapewniałem względnej ścieżki. Korzystanie z pełnej ścieżki i $HOMEnaprawiono mój problem.
tasomaniac
+1 dla wielu prostych przypadków użycia: dodanie linku symbolicznego jest dobrym rozwiązaniem, jeśli chcesz tylko dodać jeden plik wykonywalny. Jeśli chcesz zarządzać wieloma plikami wykonywalnymi w nowym folderze, dodanie do $PATHjest lepsze w tym przypadku.
David Bodow
5

Dla mnie samo ponowne uruchomienie terminala wydawało się rozwiązać problem.

Darion Miller
źródło
5

Rozwiązałem problem, otwierając kartę ogólną preferencji terminala i zmieniając polecenie (pełna ścieżka) /bin/bashna domyślne, a następnie edytując ~/.zshrcplik.

wprowadź opis obrazu tutaj

export PATH="all your path inside the quotes"

... bez spacji między PATH="i zapisz plik.

wprowadź opis obrazu tutaj

Po zapisaniu pliku zmień /bin/zshw poleceniu lub wybierz domyślny wprowadź opis obrazu tutaj

... i zrestartuj terminal, a powłoka zsh powinna znowu działać!

Vish
źródło
4

Jeśli mnie lubisz, będziesz mieć aplikację dwóch terminali, jeden jest domyślnym terminalem z bash jako domyślną powłoką, a drugi iTerm 2 z zsh jako powłoką. Aby mieć zarówno polecenia, jak i zsh w iTerm 2 z bash, musisz wykonać następujące czynności:

W iTerm 2 przejdź do preferencji (lub polecenia,). Następnie przejdź do zakładki profilu i zejdź do polecenia . Jak widać na poniższym obrazku, musisz wybrać opcję polecenia i wkleić ścieżkę powłoki zsh (aby znaleźć ścieżkę, możesz to zrobić which zsh).

wprowadź opis obrazu tutaj

W tym momencie będziesz mieć zsh jako domyślną powłokę TYLKO dla iTerm 2 i będziesz mieć bash jako globalną domyślną powłokę w domyślnej aplikacji terminala mac. Dalej nadal brakuje poleceń z bash w zsh. Aby to zrobić, musisz przejść do swojego bash (gdzie masz działające polecenia) i pobrać zmienną PATH z env (użyj tego polecenia, aby to zrobić:) env | grep PATH.

Gdy już to zrobisz, przejdź do iTerm 2 i wklej ścieżkę do opcji „wyślij tekst przy starcie”.

export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin && clear

Po prostu ponownie otwórz iTerm 2 i gotowe!

Kamil B.
źródło
Powodem, dla którego dodaliśmy eksport do opcji „Wyślij tekst na początku” jest to, że z jakiegoś powodu dla mnie ścieżka zawsze resetuje się do tego, co była wcześniej, za każdym razem, gdy ponownie otwieram iTerm 2. Jest to więc dobry sposób na naprawienie tego.
Kamil B
4

Moje rozwiązanie:

Zmień z powrotem na bash:

source .bashrc

Kolejny:

echo $PATH

skopiuj to:

/home/frank/.asdf/shims:/home/frank/....

powrót do zsh:

source .zsh

otwarte .zshrc:

i wklej:

 export PATH=/home/frank/.asdf/shims:/home/frank/....

zrestartuj terminal

Leandro Castro
źródło
2

Najlepsze rozwiązanie działa dla mnie na ścieżkę trwałej zmiany

Otwórz Finder-> przejdź do folderu / Users / / usr / local / bin

otwórz .zshrc za pomocą TextEdit

.zshrc jest plikiem ukrytym, więc odkryj go za pomocą polecenia + shift +. naciśnij

usuń zawartość i typ pliku

export PATH = ~ / usr / bin: / bin: / usr / sbin: / sbin: $ PATH

i zapisz

teraz

zsh: polecenie nie zostało znalezione

9to5ios
źródło
1

W moim przypadku przez pomyłkę skomentowany kod został odkomentowany w pierwszej linii.

# If you come from bash you might have to change your $PATH.

Skrót został usunięty. Po dodaniu z powrotem działało dobrze.

Właśnie opublikowałem to tutaj, aby ktoś mógł uznać to za pomocne. Ponieważ to dopiero początek linii i może zostać przez pomyłkę usunięty, tak jak to zrobiłem. I wydaje się, że nie ma rozwiązania po wypróbowaniu kilku sposobów.

Bhojendra Rauniyar
źródło
0

Ponowne uruchomienie terminala również zrobiło dla mnie sztuczkę.

Sergio Acosta
źródło
0

Jak powiedzieli inni, po prostu ponowne uruchomienie terminala po wprowadzeniu zmian powinno zresetować się i zmiany wprowadzone w pliku ~ / .zshrc. Na przykład po dodaniu funkcji do otwartego studia wizualnego:

function code {  
    if [[ $# = 0 ]]
    then
        open -a "Visual Studio Code"
    else
        local argPath="$1"
        [[ $1 = /* ]] && argPath="$1" || argPath="$PWD/${1#./}"
        open -a "Visual Studio Code" "$argPath"
    fi
}

Udało mi się użyć kodu słowa kluczowego, aby otworzyć program z wiersza poleceń.

Nathan Minarik
źródło
0

Sposobem na edycję pliku .zshrc bez robienia tego za pomocą iTerm2 lub natywnego terminala w systemie macOS jest użycie terminala w innej aplikacji. Na przykład użyłem terminala jako części VSCode i mogłem znaleźć i edytować plik.

Ramboo19
źródło
0

jeśli używasz macOS, spróbuj wykonać ten krok

jeśli napiszesz kod do eksportu PATH ~/.bash_profile, nie przegap kroku 1

Krok 1:

  • upewnij się, że .bash_profilejest ładowany, gdy twój terminal jest otwarty, sprawdź swój ~/.bashrclub ~/.zshrc(jeśli używasz zsh), czy jest podobny kod, source ~/.bash_profileczy nie? jeśli nie, możesz dodać ręcznie, dodając source ~/.bash_profiletam kod
  • Upewnij się również, że ten kod znajduje się na twoim .bash_profile>, export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinjeśli go tam nie ma, dodaj do niego ten kod

2 września:

  • upewnij się, że "Visual Studio Code.app"znajduje się we właściwym miejscu> "/Applications"lub"/Users/$(whoami)/Applications"
  • usuń starą zainstalowaną PATH vs-code rm -rf /usr/local/bin/code
  • otwórz „Visual Studio Code.app”
  • CMD+Shift+P a następnie wybierz "Shell Command: Instal "code" command in PATH"
  • uruchom ponownie komputer Mac i sprawdź, uruchamiając to code -v, powinno działać
Sigit Kuncoro
źródło
-2

Odinstaluj i ponownie zainstaluj zsh działało dla mnie:

sudo yum remove zsh
sudo yum install -y zsh
Maniak
źródło