Saya telah membuat skrip bash tetapi ketika saya mencoba untuk mengeksekusinya, saya mengerti
#!/bin/bash no such file or directory
Saya perlu menjalankan perintah: bash script.sh
agar berfungsi.
Bagaimana saya bisa memperbaikinya?
bash
shell-script
executable
shebang
Nicolas de Fontenay
sumber
sumber
#!/usr/bin/env bash
sebagai pengganti#!/bin/bash
dan juga mencari di sini ...Jawaban:
Jenis pesan ini biasanya disebabkan oleh jalur shebang palsu, baik kereta tambahan kembali di akhir baris pertama atau BOM di awal.
Lari:
dan lihat bagaimana akhirnya.
Ini salah:
Ini salah juga:
Ini benar:
Gunakan
dos2unix
(ataused
,tr
,awk
,perl
,python
...) untuk memperbaiki naskah Anda jika ini adalah masalah.Ini adalah salah satu yang akan menghapus BOM dan tailing CRs:
Perhatikan bahwa shell yang Anda gunakan untuk menjalankan skrip akan sedikit memengaruhi pesan kesalahan yang ditampilkan.
Berikut adalah tiga skrip yang hanya menunjukkan nama mereka (
echo $0
) dan memiliki baris shebang masing-masing berikut:correctScript:
scriptWithBom:
scriptWithCRLF:
Di bawah bash, menjalankannya akan menampilkan pesan-pesan ini:
Menjalankan yang palsu dengan memanggil juru bahasa secara eksplisit memungkinkan skrip CRLF berjalan tanpa masalah:
Berikut adalah perilaku yang diamati di bawah
ksh
:dan di bawah
dash
:sumber
hexdump -C yourscript | head -n 1
. Saya masih akan menggunakannyados2unix yourscript
untuk memperbaikinya.#!/bin/bash no such file or directory
pesan kesalahan, karena tidak ada alasan apa pun akan mencoba untuk mengeksekusi atau membuka#!/bin/bash
. Itu/bin/bash<CR>
yang akan dieksekusi.dos2unix
juga menghapus BOM UTF-8. BOM UTF-8 bisa menjelaskan pesan kesalahan.Ini juga dapat disebabkan oleh BOM dalam skrip UTF-8. Jika Anda membuat skrip di Windows kadang-kadang Anda mendapatkan sampah di awal file.
sumber
Sebenarnya, shebang yang tepat untuk skrip bash adalah ini:
Karena, di freeBSD, bash terletak di
/usr/local/bin/bash
sumber
Anda dapat menggunakan vi untuk memperbaiki kedua masalah jika ada:
sumber
Jika Anda tidak memiliki dos2unix, ini adalah cara untuk memperbaiki masalah ini.
sumber
Tanda Byte-order (BOM)
Ini bisa disebabkan oleh BOM. Dari Wikipedia, BOM adalah a
Sayangnya, itu tidak memberi sinyal apa pun ke kernel Linux yang menangani garis she-bang. Anda dapat memverifikasi bahwa Anda memiliki BOM dengan menggunakan
file
,Atau Anda dapat men-hexdump beberapa karakter pertama dan melihat apakah mereka cocok dengan salah satu karakter BOM secara manual
Anda dapat menghapus karakter BOM begitu Anda tahu mereka seperti ini,
sumber
Saya mengalami masalah dengan secara tidak sengaja menambahkan bash yang dapat dieksekusi ke
PATH
dan karena dalam skrip saya#!/usr/bin/env bash
shebang yang lebih fleksibel digunakan (ambil bash yang dapat dieksekusi terlebih dahulu dari path).Saya telah menginstal GIT untuk Windows untuk bekerja
cygwin
bersama dengan Windows GIT GUI (tidak bekerja dengan cygwin native git ...). Saya memecahkan ini sekarang dengan beralih ke#!/bin/bash
sheband dan menghapus GIT untuk windows dariPATH
.sumber
Mencoba
#!/bin/bash
Hal kedua:
find / -name bash
Hal ketiga:
ls -al /bin/bash
sumber
which bash
. Kami tahu itu menemukan satu karena itu bekerja denganbash script.sh
.