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.?


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

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.


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!


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.


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


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!


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.


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.


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! :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.