Al ejecutar un script bash en la Terminal de Linux, ¿hay alguna diferencia entre " bash foo.sh
" y " ./foo.sh
"? ¿O son simplemente dos formas diferentes de realizar la misma función?
Respuesta1
Probablemente sean equivalentes si./foo.sh
- es ejecutable y
- comienza con
#!/bin/bash
(o equivalente)
De lo contrario, y dada la condición previa que usted describe ( foo.sh
es un script bash), la ./foo.sh
versión puede fallar, ya sea porque no tiene permiso de ejecución para el usuario o porque la interpreta en /bin/sh
lugar de /bin/bash
( /bin/sh
es el intérprete de script predeterminado).
Respuesta2
Además de la respuesta de Toby, quiero señalar que se deben verificar los parámetros shebang bash existentes en el script (como #!/bin/bash -e) antes de llamar simplemente a 'bash foo.sh'. Llamar a un script a través de 'bash foo.sh' no tendrá en cuenta los parámetros de bash existentes en el shebang.
Respuesta3
La gente ya lo explicó aquí, pero en palabras simples bash foo.sh
significa que foo.sh se ejecutará en bash shell.
Es solo una forma de indicarle al kernel qué script de shell se utilizará para ejecutar el script y realizar cambios en el script.