En la Terminal de Linux, ¿hay alguna diferencia entre "bash foo.sh" y "./foo.sh"?

En la Terminal de Linux, ¿hay alguna diferencia entre "bash foo.sh" y "./foo.sh"?

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

  1. es ejecutable y
  2. comienza con #!/bin/bash(o equivalente)

De lo contrario, y dada la condición previa que usted describe ( foo.shes un script bash), la ./foo.shversión puede fallar, ya sea porque no tiene permiso de ejecución para el usuario o porque la interpreta en /bin/shlugar de /bin/bash( /bin/shes 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.shsignifica 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.

información relacionada