Setiap perintah gagal dengan "perintah tidak ditemukan" setelah mengubah .bash_profile?

46

Saya memperbarui .bash_profile saya, dan sayangnya saya membuat beberapa pembaruan dan sekarang saya mendapatkan:

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

Bash_profile saya benar-benar menarik di file .sh lainnya (sumber mereka) jadi saya tidak yakin modifikasi yang mungkin menyebabkan ini.

Sekarang jika saya bahkan mencoba dan ke daftar file, saya mendapatkan:

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

Adakah tips tentang cara melacak sumber kesalahan, dan bagaimana cara menggunakan terminal untuk hal-hal dasar seperti daftar file dll?

Blankman
sumber
Apa yang terjadi jika Anda menggunakan path lengkap seperti: / bin / ls? Dan perubahan apa yang Anda lakukan?
KP MacGregor
2
Ya, tempelkan .bash_profile
Januari
/ bin / ls mencantumkan file, tapi kemudian saya melihat 2 baris di bawah ini:-bash: sed: command not found -bash: git: command not found
Blankman
Jika Anda mengalami masalah /etc/environment, gunakan perintah berikut (dalam centos 6):ssh -t root@<server-ip> "/bin/bash -c '/bin/mv /etc/environment /tmp/'"
Edenshaw

Jawaban:

66

Tampak bagi saya bahwa pada satu titik atau lain Anda menimpa PATHvariabel lingkungan default . Jenis kesalahan yang Anda miliki, menunjukkan bahwa PATHtidak mengandung /bin, di mana perintah di atas (termasuk bash) berada.

Misalnya, jika Anda melakukannya

PATH=/home/user/bin

dari pada

PATH="$PATH":/home/user/bin
Januari
sumber
Saya melakukan ini pada satu titik:export PATH=PATH:EC2_HOME/bin
Blankman
2
Anda harus menggunakan '$' dalam string PATH kedua - export PATH=$PATH:EC2_HOME/bin
Manula Waidyanatha
aneh bagaimana 'ec2-menggambarkan-daerah' tidak berfungsi, meskipun itu di jalan saya, namun ini bekerja: $ EC2_HOME / bin / ec2-menggambarkan-daerah saya melakukan sumber ulang juga ....
Blankman
2
Lihat, kami tidak tahu apa yang Anda lakukan, file lain apa yang Anda sumber, apa yang ada di dalamnya. Dan ya, setiap kali Anda sumber file, Anda menambahkan hal-hal ke jalur Anda (yang baik-baik saja, karena biasanya .bash_profile akan dibaca hanya sekali). Periksalah satu per satu dan lihat apa yang terjadi. Juga, bukankah EC2_HOME sebuah variabel? Jika ya, maka Anda harus mendahuluinya dengan $seperti ini:export PATH=$PATH:$EC2_HOME/bin
Januari
1
Saya kehilangan hitungan berapa kali saya terjebak dalam masalah itu dan berapa kali jawaban ini banyak membantu saya
Herrgott
21

Salah satu cara untuk mulai men-debug skrip bash Anda adalah dengan memulai subshell dengan opsi -x:

$ bash --login -x

Ini akan menunjukkan kepada Anda setiap perintah, dan argumennya, yang dieksekusi ketika memulai shell itu.

Opsi --login ditentukan karena .bash_profile dibaca oleh shell login. Informasi lebih lanjut tentang debugging skrip bash dapat ditemukan di sini: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html .

Pada akhirnya, saya pikir saran Januari akan bekerja untuk Anda, tetapi tautan itu layak dibaca untuk masalah di masa mendatang.

KP MacGregor
sumber
dapatkan ini: -bash: bash: perintah tidak ditemukan
Yassine Qoraiche
10

Saya mungkin menemukan masalahnya. Itu bekerja untuk saya, dan mungkin berhasil untuk Anda ...

Saya default dengan editor saya untuk menyimpan Windows (LF / CR). Karena saya menggunakan kedua sistem, sepertinya logis. Ketika saya perlu mengacaukan saya .bash_profile, saya menyadari setelah berkomentar dan mencoba hal-hal yang tidak ada yang berhasil. Saya mengubah tabungan saya ke format OS X (hanya CR) dan voilà! Tidak ada lagi "perintah tidak ditemukan" di terminal!

Mungkin semudah itu!

siprus
sumber
Hal yang sangat halus yang membuatku gila. Terima kasih telah menambahkan jawaban ini!
samuel.molinski
Inilah yang saya alami! Terima kasih. Tip cepat menggunakan perintah ini untuk mengonversi file di lingkungan unix Anda:$ dos2unix .bash_profile
melwil
Apakah Anda yakin itu yang Anda lakukan? Karena OS X adalah Unix, ia menggunakan ujung garis gaya Unix dengan karakter linefeed (LF) tunggal, bukan carriage return (CR). Satu-satunya sistem operasi populer yang menggunakan yang terakhir adalah OS 9 dan sebelumnya dan aplikasi Linux / Ubuntu akan sangat bingung karenanya.
David Foerster
6

Setelah saya tidak bisa menjalankan kembali. ~ / .bash_profile atau perintah biasa seperti whoami, grep, dll. Saya menemukan cara untuk mengekspor kembali jalur yang diperlukan:

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

Ini harus bekerja di sebagian besar sistem, meskipun beberapa jalur ini tidak ada di semua paket Linux. Itu berhasil untuk saya.

Ananth
sumber
4

Saya pikir saya mungkin telah menemukan jawaban untuk masalah jika bukan untuk Anda maka untuk orang lain yang memiliki masalah serupa. Jawaban saya untuk ini adalah saya tidak punya .bash_profile.

Jadi saya mencari di seluruh web dan saya menemukan solusinya. Yang pada dasarnya adalah membuka terminal, ketik touch ~/.bash_profiledan tekan Enter. Itu memperbaiki masalah saya. Semoga itu melakukan hal yang sama untuk Anda

Paul
sumber
8
LOL ... -bash: touch: command not found
Kumar KL
2

Saya memiliki masalah yang sama seperti Anda. Saya tidak dapat menggunakan banyak perintah populer ( ls, vi/vim, ..) dan tidak bisa mengedit /root/.bashrcketika saya login dengan suke akar.

Akhirnya. Saya menemukan solusi untuk masalah ini. Cukup login root dengan perintah:

su -m

Setelah itu, Anda bisa menggunakannya

vim /root/.bashrc

untuk mengedit PATH.

Semoga berhasil!

MrReS
sumber
2

Saya memiliki masalah yang sama. Anda mungkin melewatkan $ saat mengekspor PATH. Anda harus membuka .bash_profile di TextEdit. Jika Anda tidak dapat menemukan file di direktori, tekan Command + Shift +> untuk menampilkan file yang tersembunyi.

Kemudian lakukan koreksi ke PATH dan kemudian simpan.

Dalam direktori di Terminal, ketik: source .bash_profile.

Ini harus menyelesaikan masalah.

Kensam
sumber
Terima kasih telah menyelesaikan masalah saya, akhirnya saya dapat mengedit file bash_profile saya.
Touseef Murtaza
1

Saya memiliki masalah yang persis sama:

Jika saya memasukkan 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/

jika saya memasukkan perintah yang sama persis di tty2 saya mendapat:

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

berarti DOS akhir baris, jadi saya membuka file ~/.bashrcdan mengubah ujung baris di Krusader ke gaya unix. Dan sudah bekerja !!! :-)

DOS EOL membuat masalah spourious juga dalam skrip bash.

xerostomus
sumber
1

Saya mendapat masalah yang sama sekarang setelah saya mengubah .bash_profile. Dan saya ingin mengubahnya kembali tetapi sekarang saya tidak bisa, karena saya kehilangan semua perintah, terutama perintah nano dan perintah vim, jadi saya tidak bisa membuka file .bash_profile dengan perintah. Dan .bash_profilefile tersembunyi saya tidak bisa membukanya dengan Finder.

Jadi saya perlu menemukan cara untuk membuka file .bash_profile. Setelah saya mencoba banyak cara saya menemukan bahwa saya dapat menggunakan Atom , karena Atom dapat membaca semua file dalam folder proyek, termasuk file yang tersembunyi. Jadi cukup buka Atom, dan pilih File -> Open, pilih <yourusername>folder, dan kemudian, semua file tersembunyi ditampilkan pada tampilan pohon Atom, termasuk .bash_profile!! Setelah saya menghapus modifikasi terakhir dan membuka kembali Terminal, semua perintah kembali! :)

backslash112
sumber