¿Cómo ejecutar un script bash?

19

Entonces escribí mi primer script de bash:

#!/bin/bash
echo 'hello world!'
exit

Sé que tiene la ubicación correcta para golpear y es ejecutable:

$ which bash
/bin/bash
$ chmod +x myscript.sh

Ahora quiero ejecutarlo desde la línea de comando, pero aparece un error:

$ myscript.sh
myscript.sh: command not found

Entonces, en cambio, intento esto y funciona:

$ bash myscript.sh
hello world!

¿Es así como siempre tendré que ejecutarlo? Siento que he ejecutado otros scripts sin tener que precederlo bash. ¿Cómo puedo ejecutar myscript.sh sin tener que precederlo bash?

Actualización: Aquí hay una buena explicación de por qué y cómo ejecutar un script bash .

Andrés
fuente

Respuestas:

28

Tienes que hacer que el archivo sea ejecutable. Puedes hacer eso con

chmod +x <filename>

donde está el nombre de su script y luego tiene que anteponerlo ./para indicar al shell que ejecute un archivo en el directorio local, como:

./script.sh

Solo puede ejecutar archivos que están en su PATHo que especifica una ruta a ellos. ./, el directorio local, no está en el PATHvalor predeterminado porque alguien puede usarlo para fines nefastos. Imagina una secuencia de comandos llamada lscaída en un directorio, entras en ese directorio, ejecutas lsy esa secuencia de comandos hace algo malo.

Mientras lo hace, puede hacer que sea más portátil ejecutando shell en lugar de bash usando:

#!/bin/sh

o ejecutando bash sin importar dónde esté instalado siempre que esté instalado:

#!/usr/bin/env bash
pupeno
fuente
Ya lo hice con chmod + x myscript.sh. ¿Lo hice mal?
Andrew
1
Probablemente te falte. / Lo he agregado a la respuesta.
pupeno
1

Además del consejo de Fernández, preceda con un punto como este:

./myscript.sh

Por razones de seguridad, el directorio actual nunca se incluye en la ruta de ejecución.

harrymc
fuente
1

Hay 3 formas de ejecutar el script bash. Con el ejemplo myscript.sh como el script que desea ejecutar.

Método 1

ejecutar el script como un subproceso, lo que provocará problemas de permisos si no es el propietario de la escritura Puede cambiar los permisos por chmod.

$ chmod + x myscript.sh

$ ./myscript.sh

Método 2

ejecuta el script como usuario actual. Si el script bash está bien escrito, no debería tener errores.

$ bash myscript.sh

Método 3

similar al método 2 pero un atajo. tenga en cuenta que esto se basa en la suposición de que está utilizando bash shell en la sesión actual.

PS myscript.sh

¡espero que esto ayude!:)

Jimmy MG Lim
fuente