Ho uno script che assomiglia a questocosa è la differenza tra l'esecuzione di uno script di shell come ./script.sh e sh script.sh
#!/bin/bash
function something() {
echo "hello world!!"
}
something | tee logfile
Ho impostato il permesso di esecuzione su questo file e quando provo eseguire il file come questo
$./script.sh
funziona perfettamente bene, ma quando l'eseguo sulla riga di comando come questo
$sh script.sh
Genera un errore. Perché questo accade e quali sono i modi in cui posso risolvere questo problema.
Non è la shell che legge la prima riga dello script ma il kernel tramite una delle chiamate di sistema exec(). – Beano
Per essere un po 'più generico, il kernel cerca un costrutto hash-bang sulla prima riga dello script ed esegue l'interprete (cioè la shell) chiamato su quella linea (insieme alle opzioni che vengono dopo l'interprete). L'OP ha specificato che l'hash-bang era '#!/Bin/bash', quindi il kernel inizia * bash *. Allo stesso modo l'OP ha specificato che il file era eseguibile, che è richiesto per 'path/to/script.sh', ma non per' sh script.sh'. –