Los archivos .sh requieren `sh app.sh` incluso con la línea `#!/bin/bash`

Los archivos .sh requieren `sh app.sh` incluso con la línea `#!/bin/bash`

Tengo la impresión de que si incluyo la línea

#!/bin/bash

al comienzo de mi archivo, será reconocido como un script bash que puedo ejecutar con solo

file.sh

en lugar de

sh file.sh

Pero en mi caso, file.shda algo así como test.shda test.sh: command not found. ¿Porqué es eso?

ACTUALIZAR

Noto que necesito usar ./. ¿Pero pensé que buscaría en el directorio actual de todos modos?

./test.sh

Respuesta1

Primero debes asegurarte de que el archivo sea ejecutable:

chmod +x file.sh

Y luego, para ejecutarlo, debe colocarlo en su RUTA, es decir, uno de los directorios de archivos que el sistema operativo busca cuando busca archivos para ejecutar, que puede encontrar con echo $PATH, o debe escribir:

./file.sh

En lugar de simplemente escribir file.sh.

Puedes simplemente escribir file.sh, si está en tu RUTA, lo cual recomiendo. Un buen lugar está en ~/bin. Cree esa carpeta si no está allí y, en Ubuntu, se agregará a su ruta cuando inicie sesión.

Respuesta2

Debe iniciarlo con ./file.sh, porque el directorio actual no está en la RUTA.

Si esto no es suficiente, porque se perdió lo que frabjous sugiere, chmod a+xdebe iniciar programas que comiencen con un shebang #!/bin/bashcon

bash file.sh

no

sh file.sh

incluso si sh es un enlace simbólico a /bin/bash.

El shell comprueba cómo se invocó y puede invocarse para shactuar en modo compatible, por lo que puede fallar al manejar algunos bashismos, que funcionarían si se invocaran como bash file.sh.

Ese no era tu problema, pero podría convertirse en uno si no conoces estas sutiles distinciones.

información relacionada