Tengo un script que tiene este aspectoCuál es la diferencia entre ejecutar una secuencia de comandos shell como ./script.sh y SH script.sh
#!/bin/bash
function something() {
echo "hello world!!"
}
something | tee logfile
he puesto el permiso de ejecución de este fichero y cuando intento ejecutar el archivo como esto
$./script.sh
funciona perfectamente bien, pero cuando lo ejecuto en la línea de comando como este
$sh script.sh
Se lanza un error. ¿Por qué sucede esto y cuáles son las formas en que puedo solucionarlo?
No es el shell el que lee la primera línea del script sino el núcleo a través de una de las llamadas al sistema exec(). – Beano
Para ser un poco más genérico, el kernel busca un constructo hash-bang en la primera línea del script y ejecuta el intérprete (es decir, el shell) nombrado en esa línea (junto con las opciones que vienen después del intérprete). El OP especificó que el hash-bang era '#!/Bin/bash', por lo que el núcleo comienza * bash *. Del mismo modo, el OP especificó que el archivo era ejecutable, lo cual es necesario para 'path/to/script.sh', pero no para' sh script.sh'. –