La tua shell interattiva è dash
(mascherato da sh
). Il dash
shell dice
sh: /usr/local/bin/wait-for: not found
quando tenta di eseguire uno script con #!
difettoso -line che punta a un interprete che non può essere trovato. Succede essere esattamente lo stesso errore che otterresti quando il comando che digiti non può essere trovato, quindi è facile pensare che sia un $PATH
problema (non è in questo caso). Altre shell hanno messaggi di errore più informativi (bash
e zsh
dice "bad interpreter:No such file or directory" e ti dice anche quale interprete ha cercato di eseguire).
Poiché il file è un file di testo DOS, il file #!
-line ordina alla shell di eseguire lo script con /bin/sh\r
, dove \r
è una rappresentazione comune di un carattere di ritorno a capo, che fa parte della terminazione di riga nei file di testo DOS. Su un sistema Unix, un ritorno a capo è un "carattere ordinario" e non fa parte della terminazione di riga, il che significa che tenta di iniziare /bin/sh\r
per eseguire lo script e quindi fallisce poiché quel file non esiste. È quindi l'interprete cioè "non trovato", non lo script stesso.
Eseguire lo script con un esplicito l'interprete ignora il #!
-line, sempre, motivo per cui non ricevi l'errore quando lo fai. Tuttavia, ogni riga dello script avrebbe ancora i ritorni a capo alla fine, il che potrebbe causare il malfunzionamento dello script in alcune condizioni.
Semplicemente risalvando il file come file di testo Unix o convertendolo con dos2unix
, risolverebbe il tuo problema.