Setiap kali saya menjalankan skrip menggunakan bash scriptname.sh
dari baris perintah di Debian, saya mendapatkan Command Not found
dan kemudian hasil skrip.
Skrip berfungsi tetapi selalu ada Command Not Found
pernyataan yang dicetak di layar untuk setiap baris kosong. Setiap baris kosong menghasilkan perintah tidak ditemukan.
Saya menjalankan skrip dari /var
folder.
Berikut skripnya:
#!/bin/bash
echo Hello World
Saya menjalankannya dengan mengetik yang berikut:
bash testscript.sh
Mengapa ini terjadi?
bash -x scriptname.sh
untuk melacak kesalahan. - Dalam kasus saya itu adalah file-sh yang disimpan di bawah Windows dengan VSCode dan ujung baris sebagai "CRLF". Di VSCode di pojok kanan bawah Anda dapat mengubah terminator baris dari "CRLF" menjadi "LF". Mengupload file ini dan akhirnya dapat menjalankannya denganbash scriptname.sh
.Jawaban:
Pastikan baris pertama Anda adalah:
Masukkan jalur Anda menuju pesta jika tidak
/bin/bash
Coba jalankan:
Itu akan mengubah akhiran baris, dll dari Windows ke format unix. yaitu menghapus \ r (CR) dari ujung baris untuk mengubahnya dari
\r\n (CR+LF)
menjadi\n (LF)
.Lebih detail tentang
dos2unix
perintah (halaman manual)Cara lain untuk mengetahui apakah file Anda dalam format dos / Win:
Outputnya akan terlihat seperti ini:
Ini akan menampilkan seluruh teks file dengan
<CR>
ditampilkan untuk setiap\r
karakter dalam file.sumber
bash scriptname.sh
(tapi ini masih latihan yang bagus, tentu saja).Anda dapat menggunakannya
bash -x scriptname.sh
untuk melacaknya.sumber
Saya juga mengalami masalah serupa. Masalahnya sepertinya adalah izin. Jika Anda melakukannya
ls -l
, Anda mungkin dapat mengidentifikasi bahwa file Anda mungkin TIDAK mengaktifkan bit eksekusi. Ini TIDAK akan memungkinkan skrip untuk dieksekusi. :)Seperti yang ditambahkan @artooro dalam komentar:
sumber
chmod +x testscript.sh
Ini mungkin sepele dan tidak ada hubungannya dengan pertanyaan OP, tapi saya sering membuat kesalahan ini di awal ketika saya sedang belajar scripting
Ini akan menghasilkan respons 'perintah tidak ditemukan'. Cara yang benar adalah menghilangkan spasi
sumber
Jika skrip melakukan tugasnya (relatif) dengan baik, maka itu berjalan dengan baik. Masalah Anda mungkin satu baris dalam file yang mereferensikan program yang tidak berada di jalur, tidak diinstal, salah eja, atau yang serupa.
Salah satu caranya adalah dengan menempatkan a
set -x
di bagian atas skrip Anda atau menjalankannya denganbash -x
alih - alih hanyabash
- ini akan mengeluarkan baris sebelum mengeksekusinya dan Anda biasanya hanya perlu melihat keluaran perintah segera sebelum kesalahan untuk melihat apa yang menyebabkan masalahJika, seperti yang Anda katakan, baris kosong yang menyebabkan masalah, Anda mungkin ingin memeriksa apa yang sebenarnya ada di dalamnya. Lari:
dan pastikan tidak ada karakter lucu yang "tidak terlihat" seperti
CTRL-M
(carriage return) yang mungkin Anda dapatkan dengan menggunakan editor tipe Windows.sumber
Di Bash untuk Windows, saya mencoba menjalankan secara tidak benar
tanpa ./ di awal dan mendapatkan kesalahan yang sama.
Untuk orang dengan latar belakang Windows, formulir yang benar tampak berlebihan:
sumber
gunakan
dos2unix
pada file skrip Anda.sumber
Mencoba
chmod u+x testscript.sh
Saya mengetahuinya dari sini: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/
sumber
untuk mengeksekusi itu, Anda harus memberikan jalur lengkapnya misalnya
sumber
Jika Anda memiliki Notepad ++ dan mendapatkan Pesan Kesalahan .sh ini: "perintah tidak ditemukan" atau Pesan Kesalahan autoconf ini "baris 615: ../../autoconf/bin/autom4te: Tidak ada file atau direktori seperti itu" .
Di Notepad ++ Anda, Pergi ke Edit -> EOL Conversion lalu centang Macinthos (CR) . Ini akan mengedit file Anda. Saya juga mendorong untuk memeriksa semua file dengan perintah ini, karena kesalahan seperti itu akan segera terjadi.
sumber
Punya masalah yang sama. Sayangnya
jadi saya melakukan ini untuk mengonversi.
lalu
sumber
Masalah dengan menjalankan skrip mungkin juga terkait dengan pemformatan yang buruk dari perintah multi-baris, misalnya jika Anda memiliki karakter spasi setelah pemutusan baris "\". Misalnya ini:
(harap dicatat bahwa spasi ekstra setelah "\") akan menyebabkan masalah, tetapi ketika Anda menghapus spasi itu, itu akan berjalan dengan baik.
sumber
Saya juga mengalami beberapa
Cannot execute command
. Semuanya tampak benar, tetapi sebenarnya saya memiliki ruang yang tidak dapat dipecahkan
tepat sebelum perintah saya yang tentu saja tidak mungkin dilihat dengan mata telanjang:Yang, di Vim, tampak seperti:
Hanya setelah menjalankan pemeriksa skrip Bash
shellcheck
saya menemukan masalah.sumber
shellcheck
tersedia secara online, meskipun Anda tentu saja perlu menyalin + menempelkan skrip Anda dengan tepat agar dapat membantu. shellcheck.netSaya mengalami ini hari ini, tanpa sadar menyalin prompt perintah dolar
$
(di depan string perintah) ke dalam skrip.sumber
Tambahkan direktori saat ini (.) Ke PATH agar dapat mengeksekusi skrip, hanya dengan mengetikkan namanya, yang berada di direktori saat ini:
sumber
.
KE JALAN ANDA.Anda mungkin ingin memperbarui file .bashrc dan .bash_profile dengan alias untuk mengenali perintah yang Anda masukkan.
File .bashrc dan .bash_profile adalah file tersembunyi yang mungkin terletak di drive C: tempat Anda menyimpan file program.
sumber