Każde polecenie kończy się niepowodzeniem, gdy polecenie „nie znaleziono polecenia” po zmianie pliku .bash_profile?

46

Aktualizowałem mój .bash_profile i niestety zrobiłem kilka aktualizacji i teraz otrzymuję:

env: bash: No such file or directory
env: bash: No such file or directory
env: bash: No such file or directory
env: bash: No such file or directory
env: bash: No such file or directory
-bash: tar: command not found
-bash: grep: command not found
-bash: cat: command not found
-bash: find: command not found
-bash: dirname: command not found
-bash: /preexec.sh.lib: No such file or directory
-bash: preexec_install: command not found
-bash: sed: command not found
-bash: git: command not found

Mój profil bash faktycznie pobiera inne pliki .sh (źródła), więc nie jestem pewien, która modyfikacja mogła to spowodować.

Teraz, jeśli nawet spróbuję przejść do listy plików, otrzymam:

>ls
-bash: ls: command not found
-bash: sed: command not found
-bash: git: command not found

Wszelkie wskazówki dotyczące śledzenia źródła błędu i korzystania z terminala do podstawowych czynności, takich jak wyświetlanie listy plików itp.?

Blankman
źródło
Co się stanie, jeśli użyjesz pełnej ścieżki, takiej jak: / bin / ls? A jakie zmiany wprowadzałeś?
KP MacGregor
2
Tak, wklej .bash_profile
Styczeń
/ bin / ls wyświetla listę plików, ale potem widzę te 2 wiersze poniżej:-bash: sed: command not found -bash: git: command not found
Blankman
W przypadku /etc/environmentwystąpienia problemu użyj następującego polecenia (w centach 6):ssh -t root@<server-ip> "/bin/bash -c '/bin/mv /etc/environment /tmp/'"
Edenshaw

Odpowiedzi:

65

Wydaje mi się, że w pewnym momencie zastępujesz domyślną PATHzmienną środowiskową. Rodzaj błędów, które masz, wskazuje, że PATHnie zawiera /bin, gdzie znajdują się powyższe polecenia (w tym bash).

Na przykład jeśli tak

PATH=/home/user/bin

zamiast

PATH="$PATH":/home/user/bin
styczeń
źródło
Zrobiłem to w pewnym momencie:export PATH=PATH:EC2_HOME/bin
Blankman
2
Musisz użyć „$” w drugim ciągu ŚCIEŻKI - export PATH=$PATH:EC2_HOME/bin
Manula Waidyanatha
dziwne, jak „ec2-opisz-regiony” nie działa, mimo że jest na mojej ścieżce, ale to działa: $ EC2_HOME / bin / ec2-opisz-regiony Zrobiłem także przeładowanie źródła ....
Blankman
2
Słuchaj, nie wiemy, co robisz, jakie inne pliki pozyskujesz, co jest w nich. I tak, za każdym razem, gdy źródło pliku, dodajesz rzeczy do swojej ścieżki (co jest w porządku, ponieważ normalnie .bash_profile zostanie odczytany tylko raz). Przejrzyj je jeden po drugim i zobacz, co się stanie. Ponadto, czy EC2_HOME nie jest zmienną? Jeśli tak, to należy poprzedzić go z $tak:export PATH=$PATH:$EC2_HOME/bin
styczeń
1
Tracę rachubę, ile razy utknąłem w tym problemie i ile razy ta odpowiedź bardzo mi pomogła
Herrgott,
21

Jednym ze sposobów rozpoczęcia debugowania skryptu bash jest uruchomienie podpowłoki z opcją -x:

$ bash --login -x

Spowoduje to wyświetlenie każdego polecenia i jego argumentów, które są wykonywane podczas uruchamiania tej powłoki.

Podano opcję --login, ponieważ plik .bash_profile jest odczytywany przez powłoki logowania. Więcej informacji na temat debugowania skryptów bash można znaleźć tutaj: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html .

Ostatecznie myślę, że propozycja stycznia będzie dla ciebie skuteczna, ale ten link jest wart przeczytania na wypadek przyszłych problemów.

KP MacGregor
źródło
otrzymałem to: -bash: bash: nie znaleziono polecenia
Yassine Qoraiche
10

Mogłem znaleźć problem. To działało dla mnie i może działać dla ciebie ...

Domyślnie z moim edytorem zapisywałem Windows (LF / CR). Ponieważ używam obu systemów, wydawało się to logiczne. Kiedy musiałem z nimi zadzierać .bash_profile, po skomentowaniu i wypróbowaniu rzeczy zrozumiałem, że nic nie działa. Zmieniłem swoje zapisy na format OS X (tylko CR) i voilà! Nie ma już „polecenia nie znaleziono” w terminalu!

To może być takie proste!

cyphire
źródło
Bardzo subtelna rzecz, która doprowadzała mnie do szału. Dziękujemy za dodanie tej odpowiedzi!
samuel.molinski
Właśnie tego doświadczyłem! Dzięki. Szybka wskazówka polega na użyciu tego polecenia do konwersji plików w środowisku uniksowym:$ dos2unix .bash_profile
melwil
Jesteś pewien, że to zrobiłeś? Ponieważ OS X to Unix, używa on uniksowych zakończeń linii ze znakiem pojedynczej linii (LF), a nie powrotu karetki (CR). Jedynym popularnym systemem operacyjnym, który korzystał z tego ostatniego, był OS 9 i wcześniejsze wersje, a aplikacje Linux / Ubuntu byłyby przez to dość niejasne.
David Foerster
6

Po tym, jak nie mogłem ponownie uruchomić. ~ / .bash_profile lub inne zwykłe polecenia, takie jak whoami, grep itp. Wymyśliłem sposób, aby po prostu ponownie wyeksportować wymagane ścieżki:

export PATH=/usr/local/jdk/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/cpanel/composer/bin:/usr/local/easy/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin

Powinno to działać w większości systemów, chociaż niektóre z tych ścieżek nie są obecne we wszystkich pakietach Linux. To zadziałało dla mnie.

Ananth
źródło
4

Myślę, że mogłem znaleźć odpowiedź na problem, jeśli nie dla ciebie, to dla innych, którzy mają podobny problem. Moja odpowiedź na to jest taka, że ​​nie mam .bash_profile.

Szukałem w Internecie i znalazłem rozwiązanie. Który jest w zasadzie otwórz terminal, wpisz touch ~/.bash_profilei naciśnij Enter. To naprawiło moje problemy. Mam nadzieję, że zrobi to samo dla ciebie

Paweł
źródło
8
LOL ... -bash: touch: komenda nie została znaleziona
Kumar KL
2

Mam taki sam problem jak ty. Nie mogę korzystać z wielu popularnych polecenie ( ls, vi/vim..) i nie można edytować /root/.bashrc, gdy loguję się sudo korzenia.

Wreszcie. Znalazłem rozwiązanie tego problemu. Wystarczy zalogować się rootem za pomocą polecenia:

su -m

Następnie możesz użyć

vim /root/.bashrc

edytować ŚCIEŻKĘ.

Powodzenia!

MrReS
źródło
2

Miałem ten sam problem. Być może przegapiłeś $ podczas eksportowania ŚCIEŻKI. Powinieneś otworzyć .bash_profile w TextEdit. Jeśli nie możesz znaleźć pliku w katalogu, naciśnij Command + Shift +>, aby wyświetlić ukryte pliki.

Następnie wprowadź poprawkę do ŚCIEŻKI, a następnie zapisz.

W katalogu w terminalu wpisz: source .bash_profile.

To powinno rozwiązać problem.

Kensam
źródło
Dzięki temu rozwiązałem mój problem, wreszcie mogłem edytować mój plik bash_profile.
Touseef Murtaza
1

Miałem dokładnie ten sam problem:

Jeśli wstawię lxterminal:

set | grep "jerom/bash"
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/jerom/bash/

jeśli podałem dokładnie to samo polecenie w tty2, otrzymałem:

set | grep "jerom/bash"
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/jerom/bash\r

oznacza koniec linii DOS, więc otworzyłem plik ~/.bashrci zmieniłem końce linii w Krusaderze na styl unix. I już działa !!! :-)

EOL-y DOS-a powodują ogromne problemy również w skryptach bash.

kserostomus
źródło
1

Ten sam problem mam teraz po zmianie .bash_profile. I chcę to zmienić z powrotem, ale teraz nie mogę, ponieważ straciłem wszystkie polecenia, zwłaszcza polecenie nano i polecenie vim, więc nie mogę otworzyć pliku .bash_profile z poleceniem. I .bash_profilejest ukryty plik nie mogę otworzyć go z Findera.

Muszę więc znaleźć sposób na otwarcie pliku .bash_profile. Po wypróbowaniu wielu sposobów okazało się, że mogę używać Atom , ponieważ Atom może odczytać wszystkie pliki w folderze projektu, w tym ukryte pliki. Więc po prostu otwórz Atom, File -> Openwybierz <yourusername>folder , wybierz folder, a następnie wszystkie ukryte pliki są wyświetlane w widoku drzewa Atom, włączając .bash_profile!! Po usunięciu ostatniej modyfikacji i ponownym otwarciu terminalu wszystkie polecenia wróciły! :)

ukośnik odwrotny112
źródło