Shell interaktif Anda adalah dash
(menyamar sebagai sh
). dash
kata shell
sh: /usr/local/bin/wait-for: not found
ketika mencoba menjalankan skrip yang memiliki #!
yang salah -line menunjuk ke juru bahasa yang tidak dapat ditemukan. Itu terjadi menjadi kesalahan yang persis sama dengan yang akan Anda dapatkan ketika perintah yang Anda ketikkan tidak dapat ditemukan, jadi mudah untuk berpikir bahwa itu adalah $PATH
masalah (tidak dalam kasus ini). Kerang Oher memiliki pesan kesalahan yang lebih informatif (bash
dan zsh
mengatakan "penerjemah buruk:Tidak ada file atau direktori seperti itu" dan juga memberi tahu Anda juru bahasa apa yang coba dijalankan).
Karena file tersebut adalah file teks DOS, #!
-line menginstruksikan shell untuk menjalankan skrip dengan /bin/sh\r
, di mana \r
adalah representasi umum dari karakter carriage return, yang merupakan bagian dari terminasi baris dalam file teks DOS. Pada sistem Unix, carriage return adalah "karakter biasa" dan sama sekali bukan bagian dari terminasi baris, yang berarti ia mencoba memulai /bin/sh\r
untuk menjalankan skrip Anda, dan kemudian gagal karena file tersebut tidak ada. Oleh karena itu, ini adalah penerjemah yang "tidak ditemukan", bukan skrip itu sendiri.
Menjalankan skrip dengan eksplisit penerjemah melewati #!
-line, selalu, itulah sebabnya Anda tidak mendapatkan kesalahan saat melakukannya. Namun, setiap baris dalam skrip akan tetap memiliki carriage return di akhir baris, yang dapat menyebabkan skrip gagal berfungsi dalam kondisi tertentu.
Cukup simpan ulang file sebagai file teks Unix, atau konversikan dengan dos2unix
, akan menyelesaikan masalah Anda.