Ogni comando fallisce con "comando non trovato" dopo aver modificato .bash_profile?


46

Stavo aggiornando il mio .bash_profile, e sfortunatamente ho fatto alcuni aggiornamenti e ora sto ottenendo:

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

Il mio bash_profile effettivamente estrae altri file .sh (li genera) quindi non sono esattamente sicuro di quale modifica possa averlo causato.

Ora, anche se provo e ad un elenco di file, ottengo:

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

Qualche consiglio su come rintracciare la fonte dell'errore e come poter usare il terminale per cose basilari come elencare i file ecc?


Cosa succede se si utilizza l'intero percorso in questo modo: / bin / ls? E che tipo di cambiamenti stavi facendo?
KP MacGregor,

2
Sì, incollare il .bash_profile
Gennaio

/ bin / ls elenca i file, ma poi vedo queste 2 righe sottostanti:-bash: sed: command not found -bash: git: command not found
Blankman

Se il problema /etc/environmentpersiste, utilizzare il seguente comando (in centos 6):ssh -t root@<server-ip> "/bin/bash -c '/bin/mv /etc/environment /tmp/'"
Edenshaw,

Risposte:


66

Mi sembra che in un punto o nell'altro si stia sovrascrivendo la PATHvariabile d'ambiente predefinita . Il tipo di errori che hai, indica che PATHnon contiene /bin, dove risiedono i comandi sopra (incluso bash).

Ad esempio, se lo fai

PATH=/home/user/bin

invece di

PATH="$PATH":/home/user/bin

L'ho fatto ad un certo punto:export PATH=PATH:EC2_HOME/bin
Blankman

2
Devi usare '$' nella seconda stringa PATH - export PATH=$PATH:EC2_HOME/bin
Manula Waidyanatha,

strano come 'ec2-descrivi-regioni' non funzioni, anche se è nel mio percorso, eppure funziona: $ EC2_HOME / bin / ec2-descrivi-regioni Ho fatto anche un ricaricamento della fonte ....
Blankman

2
Senti, non sappiamo cosa stai facendo, quali altri file stai acquistando, cosa c'è dentro. E sì, ogni volta che provi il file, aggiungi elementi al tuo percorso (il che va bene, perché normalmente .bash_profile verrà letto solo una volta). Attraversalo uno per uno e vedi cosa succede. Inoltre, EC2_HOME non è una variabile? Se sì, allora si dovrebbe precedere con una $come questo:export PATH=$PATH:$EC2_HOME/bin
Gennaio

1
Perdo il conto di quante volte mi sono imbattuto in quel problema e quante volte questa risposta mi ha aiutato molto
Herrgott,

21

Un modo per iniziare il debug dello script bash sarebbe quello di avviare una subshell con l'opzione -x:

$ bash --login -x

Questo mostrerà ogni comando e i suoi argomenti, che viene eseguito all'avvio di quella shell.

L'opzione --login è specificata perché .bash_profile viene letto dalle shell di login. Ulteriori informazioni sul debug degli script bash sono disponibili qui: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html .

In definitiva, penso che il suggerimento di gennaio funzionerà per te, ma quel link merita una lettura per problemi futuri.


ottenuto questo: -bash: bash: comando non trovato
Yassine Qoraiche

10

Potrei aver trovato il problema. Ha funzionato per me e potrebbe funzionare per te ...

Stavo andando in default con il mio editor per salvare Windows (LF / CR). Da quando uso entrambi i sistemi, mi è sembrato logico. Quando avevo bisogno di scherzare con il mio .bash_profile, mi sono reso conto dopo aver commentato e provato cose che non funzionava. Ho cambiato i miei salvataggi in formato OS X (solo CR) e voilà! Non più "comando non trovato" nel terminale!

Potrebbe essere così facile!


Cosa molto sottile che mi stava facendo impazzire. Grazie per aver aggiunto questa risposta!
samuel.molinski

Questo è quello che stavo vivendo! Grazie. Il suggerimento rapido utilizza questo comando per convertire i file nell'ambiente unix:$ dos2unix .bash_profile
melwil

Sei sicuro che sia quello che hai fatto? Poiché OS X è Unix, utilizza le terminazioni di linea in stile Unix con un carattere a linea singola (LF), non di ritorno a capo (CR). L'unico sistema operativo popolare che utilizzava quest'ultimo era OS 9 e precedenti e le applicazioni Linux / Ubuntu ne sarebbero state piuttosto confuse.
David Foerster,

6

Dopo non sono riuscito a ripetere. ~ / .bash_profile o qualsiasi normale comando come whoami, grep, ecc. Ho pensato a un modo per riesportare semplicemente i percorsi richiesti:

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

Questo dovrebbe funzionare nella maggior parte dei sistemi, sebbene alcuni di questi percorsi non siano presenti in tutti i pacchetti Linux. Ha funzionato per me.


4

Penso di aver trovato la risposta al problema se non fosse per te, quindi per gli altri che hanno un problema simile. La mia risposta è che non ho un .bash_profile.

Quindi stavo cercando in tutto il Web e ho trovato la soluzione. Che è sostanzialmente aprire il terminale, digitare touch ~/.bash_profilee premere Enter. Ciò ha risolto i miei problemi. Spero che faccia lo stesso per te


8
LOL ... -bash: touch: comando non trovato
Kumar KL

2

Ho lo stesso problema come te. Non posso usare molti comandi popolare ( ls, vi/vim, ..) e non può modificare /root/.bashrcquando il login con suin radice.

Finalmente. Ho trovato la soluzione per questo problema. Accedi al root con il comando:

su -m

Successivamente, puoi usare

vim /root/.bashrc

per modificare il PERCORSO.

In bocca al lupo!


2

Ho avuto lo stesso problema. Potresti aver perso $ durante l'esportazione del PERCORSO. È necessario aprire il file .bash_profile in TextEdit. Se non riesci a trovare il file nella directory, premi Comando + Maiusc +> per mostrare i file nascosti.

Quindi apportare la correzione al PERCORSO e quindi salvare.

Nella directory sul Terminale, digitare: source .bash_profile.

Questo dovrebbe risolvere il problema.


Grazie ha risolto il mio problema, finalmente sono stato in grado di modificare il mio file bash_profile.
Touseef Murtaza,

1

Ho avuto esattamente lo stesso problema:

Se inserisco 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/

se ho inserito esattamente lo stesso comando in tty2 ho ottenuto:

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

significa fine della riga DOS, quindi ho aperto il file ~/.bashrce ho cambiato le estremità delle linee in Krusader in stile unix. E funziona già !!! :-)

Le EOL DOS creano problemi spiacevoli anche negli script bash.


1

Ho avuto lo stesso problema subito dopo aver cambiato il .bash_profile. E voglio cambiarlo di nuovo, ma ora non posso, perché ho perso tutti i comandi, in particolare il comando nano e il comando vim, quindi non posso aprire il file .bash_profile con il comando. E il .bash_profilefile è nascosto, non riesco ad aprirlo con il Finder.

Quindi ho bisogno di trovare un modo per aprire il file .bash_profile. Dopo aver provato molti modi ho scoperto che posso usare Atom , poiché Atom può leggere tutti i file in una cartella di progetto, inclusi i file nascosti. Quindi basta aprire Atom e selezionare File -> Open, scegliere la <yourusername>cartella, quindi tutti i file nascosti vengono visualizzati nella vista ad albero di Atom, includere .bash_profile!! Dopo aver rimosso l'ultima modifica e riaperto il Terminale, tutti i comandi sono tornati! :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.