Jenis pesan ini biasanya disebabkan oleh jalur shebang palsu, baik kereta tambahan kembali di akhir baris pertama atau BOM di awal.
Lari:
$ head -1 yourscript | od -c
dan lihat bagaimana akhirnya.
Ini salah:
0000000 # ! / b i n / b a s h \r \n
Ini salah juga:
0000000 357 273 277 # ! / b i n / b a s h \n
Ini benar:
0000000 # ! / b i n / b a s h \n
Gunakan dos2unix
(atau sed
, tr
, awk
, perl
, python
...) untuk memperbaiki naskah Anda jika ini adalah masalah.
Ini adalah salah satu yang akan menghapus BOM dan tailing CRs:
sed -i '1s/^.*#//;s/\r$//' brokenScript
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:
0000000 # ! / b i n / b a s h \n
scriptWithBom:
0000000 357 273 277 # ! / b i n / b a s h \n
scriptWithCRLF:
0000000 # ! / b i n / b a s h \r \n
Di bawah bash, menjalankannya akan menampilkan pesan-pesan ini:
$ ./correctScript
./correctScript
$ ./scriptWithCRLF
bash: ./scriptWithCRLF: /bin/bash^M: bad interpreter: No such file or directory
$ ./scriptWithBom
./scriptWithBom: line 1: #!/bin/bash: No such file or directory
./scriptWithBom
Menjalankan yang palsu dengan memanggil juru bahasa secara eksplisit memungkinkan skrip CRLF berjalan tanpa masalah:
$ bash ./scriptWithCRLF
./scriptWithCRLF
$ bash ./scriptWithBom
./scriptWithBom: line 1: #!/bin/bash: No such file or directory
./scriptWithBom
Berikut adalah perilaku yang diamati di bawah ksh
:
$ ./scriptWithCRLF
ksh: ./scriptWithCRLF: not found [No such file or directory]
$ ./scriptWithBom
./scriptWithBom[1]: #!/bin/bash: not found [No such file or directory]
./scriptWithBom
dan di bawah dash
:
$ ./scriptWithCRLF
dash: 2: ./scriptWithCRLF: not found
$ ./scriptWithBom
./scriptWithBom: 1: ./scriptWithBom: #!/bin/bash: not found
./scriptWithBom