Jeder Befehl schlägt mit "Befehl nicht gefunden" fehl, nachdem .bash_profile geändert wurde.

46

Ich habe mein .bash_profile aktualisiert und leider ein paar Aktualisierungen vorgenommen. Jetzt erhalte ich:

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

Mein bash_profile zieht tatsächlich andere .sh-Dateien ein (quellt sie), so dass ich nicht genau weiß, welche Änderung dies verursacht haben könnte.

Wenn ich jetzt mal versuche und eine Liste von Dateien anlege, bekomme ich:

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

Irgendwelche Tipps, wie man die Fehlerquelle aufspürt und wie man das Terminal für grundlegende Dinge wie das Auflisten von Dateien usw. verwenden kann?

Blankman
quelle
Was passiert, wenn Sie den vollständigen Pfad wie folgt verwenden: / bin / ls? Und welche Art von Änderungen haben Sie vorgenommen?
KP MacGregor
2
Ja, fügen Sie Ihre .bash_profile
Januar
/ bin / ls listet die Dateien auf, aber dann sehe ich diese 2 Zeilen darunter:-bash: sed: command not found -bash: git: command not found
Blankman
Falls Ihr Problem damit bestand /etc/environment, verwenden Sie den folgenden Befehl (in Centos 6):ssh -t root@<server-ip> "/bin/bash -c '/bin/mv /etc/environment /tmp/'"
Edenshaw,

Antworten:

65

Mir scheint, dass Sie zu einem bestimmten Zeitpunkt die Standardumgebungsvariable überschreiben PATH. Die Art der Fehler, die Sie haben, gibt an, dass PATHnicht enthalten ist /bin, wo sich die obigen Befehle (einschließlich bash) befinden.

Zum Beispiel, wenn Sie das tun

PATH=/home/user/bin

Anstatt von

PATH="$PATH":/home/user/bin
Januar
quelle
Ich habe dies an einem Punkt getan:export PATH=PATH:EC2_HOME/bin
Blankman
2
Sie müssen '$' in der zweiten PATH-Zeichenfolge verwenden - export PATH=$PATH:EC2_HOME/bin
Manula Waidyanatha
seltsam , wie ‚EC2-describe-Regionen‘ nicht funktioniert, obwohl es in meinem Weg ist, doch dies funktioniert: $ EC2_HOME / bin / EC2-describe-Regionen ich auch eine Quelle reload tat ....
Blankman
2
Schauen Sie, wir wissen nicht, was Sie tun, welche anderen Dateien Sie beschaffen, was in ihnen enthalten ist. Und ja, Sie jedes Mal die Datei beziehen, Sie anhängen Dinge Ihren Weg (was in Ordnung ist, denn normalerweise wird Bash_profile nur einmal gelesen werden ). Gehen Sie es nacheinander durch und sehen Sie, was passiert. Ist EC2_HOME auch keine Variable? Wenn ja, dann sollten Sie es mit einem vorausgehen $wie folgt aus :export PATH=$PATH:$EC2_HOME/bin
Januar
1
Ich verliere die Zählung, wie oft ich in dieses Problem verwickelt war und wie oft mir diese Antwort sehr geholfen hat
Herrgott,
21

Eine Möglichkeit, mit dem Debuggen Ihres Bash-Skripts zu beginnen, besteht darin, eine Subshell mit der Option -x zu starten:

$ bash --login -x

Dies zeigt Ihnen jeden Befehl und seine Argumente, die beim Starten dieser Shell ausgeführt werden.

Die Option --login wird angegeben, weil .bash_profile von Login-Shells gelesen wird. Weitere Informationen zum Debuggen von Bash-Skripten finden Sie hier: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html .

Letztendlich denke ich, dass der Vorschlag vom Januar für Sie funktionieren wird, aber dieser Link ist für zukünftige Probleme eine Lektüre wert.

KP MacGregor
quelle
habe folgendes: -bash: bash: befehl nicht gefunden
Yassine Qoraiche
10

Möglicherweise habe ich das Problem gefunden. Es hat für mich funktioniert, und es könnte für Sie funktionieren ...

Ich habe mit meinem Editor standardmäßig Windows (LF / CR) gespeichert. Da ich beide Systeme benutze, schien es logisch. Als ich mich mit meinem .bash_profileanlegen musste, wurde mir klar, dass nichts funktionierte, nachdem ich Dinge auskommentiert und ausprobiert hatte. Ich habe meine Spielstände in das OS X-Format (nur CR) geändert und voilà! Kein "Befehl nicht gefunden" mehr im Terminal!

So einfach kann es sein!

Cyphire
quelle
Sehr subtile Sache, die mich verrückt machte. Vielen Dank für das Hinzufügen dieser Antwort!
samuel.molinski
Das habe ich erlebt! Vielen Dank. Schneller Tipp: Verwenden Sie diesen Befehl, um Dateien in Ihrer Unix-Umgebung zu konvertieren:$ dos2unix .bash_profile
melwil
Bist du sicher, dass du das getan hast? Da OS X Unix ist, werden Zeilenenden im Unix-Stil mit einem einzelnen Zeilenvorschubzeichen (LF) und nicht mit einem Wagenrücklaufzeichen (CR) verwendet. Das einzige populäre Betriebssystem, das das letztere verwendete, war OS 9 und frühere, und Linux / Ubuntu-Anwendungen wären ziemlich verwirrt.
David Foerster
6

Nachdem ich nicht mehr rennen konnte. ~ / .bash_profile oder andere übliche Befehle wie whoami, grep usw. Ich habe mir eine Möglichkeit ausgedacht, die erforderlichen Pfade einfach erneut zu exportieren:

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

Dies sollte auf den meisten Systemen funktionieren, obwohl einige dieser Pfade nicht in allen Linux-Paketen vorhanden sind. Es hat bei mir funktioniert.

Ananth
quelle
4

Ich glaube, ich habe vielleicht die Antwort auf das Problem gefunden, wenn nicht für Sie, dann für andere, die ein ähnliches Problem haben. Meine Antwort darauf ist, dass ich keine habe .bash_profile.

Also habe ich im ganzen Web gesucht und die Lösung gefunden. Wobei grundsätzlich das Terminal geöffnet, getippt touch ~/.bash_profileund gedrückt wird Enter. Das hat meine Probleme behoben. Hoffe es macht das selbe für dich

Paul
quelle
8
LOL ... -bash: touch: Befehl nicht gefunden
Kumar KL
2

Ich habe das gleiche Problem wie du. Ich kann nicht vielen beliebten Befehl (verwenden ls, vi/vim..) und kann nicht bearbeiten , /root/.bashrcwenn ich mich einloggen mit suin root.

Endlich. Ich habe die Lösung für dieses Problem gefunden. Melden Sie sich einfach mit dem folgenden Befehl als root an:

su -m

Danach können Sie verwenden

vim /root/.bashrc

um PATH zu bearbeiten.

Viel Glück!

MrReS
quelle
2

Ich hatte das gleiche problem Möglicherweise haben Sie beim Exportieren von PATH ein $ verpasst. Sie sollten das .bash_profile in TextEdit öffnen. Wenn Sie die Datei im Verzeichnis nicht finden können, drücken Sie Befehlstaste + Umschalttaste +>, um versteckte Dateien anzuzeigen.

Korrigieren Sie dann den PFAD und speichern Sie ihn.

Geben Sie im Verzeichnis auf dem Terminal Folgendes ein: source .bash_profile.

Dies sollte das Problem beheben.

Kensam
quelle
Vielen Dank, es hat mein Problem gelöst. Endlich konnte ich meine bash_profile-Datei bearbeiten.
Touseef Murtaza
1

Ich hatte genau das gleiche Problem:

Wenn ich lxterminal einsetze:

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/

Wenn ich in tty2 genau den gleichen Befehl eingegeben habe, erhalte ich:

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

\ r bedeutet DOS-Zeilenende, also habe ich die Datei geöffnet ~/.bashrcund die Zeilenenden in Krusader in den Unix-Stil geändert. Und es funktioniert schon !!! :-)

Die DOS-EOLs bereiten auch in Bash-Skripten erhebliche Probleme.

Xerostomus
quelle
1

Ich habe das gleiche Problem erst jetzt, nachdem ich das geändert habe .bash_profile. Und ich möchte es wieder ändern, kann es aber jetzt nicht mehr, da ich alle Befehle, insbesondere den nano-Befehl und den vim-Befehl, verloren habe, sodass ich das .bash_profile mit Befehl nicht öffnen kann. Und das .bash_profileist eine versteckte Datei, die ich mit dem Finder nicht öffnen kann.

Ich muss also einen Weg finden, um die .bash_profile-Datei zu öffnen. Nachdem ich viele Möglichkeiten , habe ich versucht , dass ich gefunden kann Atom , weil Atome alle Dateien in einem Projektordner lesen können, ist die versteckten Dateien. So öffnen Sie einfach Atom, und wählen Sie den File -> Open, wählen Sie <yourusername>Ordner und dann alle versteckten Dateien auf dem Atom der Baumansicht zeigt, umfassen die .bash_profile!! Nachdem ich die letzte Änderung entfernt und das Terminal wieder geöffnet hatte, kamen alle Befehle zurück! :)

backslash112
quelle