De la explicación de barra diagonal
La diferencia que haces es
con sh
, está ejecutando un programa que funcionará interpret the lines in your script
tal como lo habría escrito en el indicador interactivo del terminal,
con ./ estás haciendo un acceso directo suponiendo que el script está justo aquí en el directorio actual en el que estás sentado Y será ejecutable (porque, por ejemplo, emitiste chmod + x myscript.sh),
Información adicional de esta respuesta:
Para su secuencia de comandos específica, de cualquier manera funcionará, excepto que ./script.sh requiere ejecución y bits legibles, mientras que bash script.sh solo requiere bits legibles.
La razón de la diferencia de requisitos de permisos radica en cómo se carga el programa que interpreta su script:
./script.sh hace que su shell ejecute el archivo como si fuera un ejecutable normal. El shell se bifurca y usa una llamada al sistema (por ejemplo, execve) para hacer que el sistema operativo ejecute el archivo en el proceso bifurcado. El sistema operativo verificará los permisos del archivo (por lo tanto, se debe establecer el bit de ejecución) y reenviará la solicitud al cargador del programa, que observa el archivo y determina cómo ejecutarlo. En Linux, los ejecutables compilados comienzan con un número mágico ELF, mientras que los scripts comienzan con un #. (hashbang) Un encabezado hashbang significa que el archivo es un script y debe ser interpretado por el programa que se especifica después del hashbang. Esto permite que un script mismo le diga al sistema cómo interpretar el script.
Con su script, el cargador del programa ejecutará / bin / bash y pasará ./script.sh como argumento de la línea de comandos.
bash script.sh hace que su shell ejecute bash y pase script.sh como argumento de la línea de comandos Por lo tanto, el sistema operativo cargará bash (sin siquiera mirar script.sh, porque es solo un argumento de línea de comandos). El proceso bash creado entonces interpretará el script.sh porque se pasa como argumento de la línea de comandos. Debido a que script.sh solo es leído por bash como un archivo normal, no se requiere el bit de ejecución.