¿Cómo ejecutar un script de shell en una consola Unix o en un terminal Mac?

Lo sé, olvídalo y vuelve a aprenderlo de nuevo. Es hora de escribirlo.

Para ejecutar un script sh no ejecutable, use:

 sh myscript 

Para ejecutar un script bash no ejecutable, use:

 bash myscript 

Para iniciar un ejecutable (que es cualquier archivo con permiso ejecutable); solo lo especifica por su ruta:

 /foo/bar /bin/bar ./bar 

Para hacer un script ejecutable, dele el permiso necesario:

 chmod +x bar ./bar 

Cuando un archivo es ejecutable, el kernel es responsable de averiguar cómo ejecutarlo. Para los no binarios, esto se hace mirando la primera línea del archivo. Debe contener un hashbang :

 #! /usr/bin/env bash 

El hashbang le dice al núcleo qué progtwig ejecutar (en este caso, el comando /usr/bin/env se ejecuta con el argumento bash ). Luego, la secuencia de comandos se pasa al progtwig (como segundo argumento) junto con todos los argumentos que le dio a la secuencia de comandos como argumentos posteriores.

Eso significa que cada script que es ejecutable debe tener un hashbang . Si no lo hace, no le está diciendo al núcleo qué es , y por lo tanto, el kernel no sabe qué progtwig usar para interpretarlo. Podría ser bash , perl , python , sh u otra cosa. (En realidad, el kernel usará a menudo el intérprete de comandos predeterminado del usuario para interpretar el archivo, lo cual es muy peligroso porque podría no ser el intérprete correcto o podría ser capaz de analizar parte de él, pero con sutiles diferencias de comportamiento, como el caso entre sh y bash ).

Una nota sobre /usr/bin/env

Lo más común es que veas el hash bangs así:

 #!/bin/bash 

El resultado es que el núcleo ejecutará el progtwig /bin/bash para interpretar el script. Desafortunadamente, bash no siempre se envía por defecto, y no siempre está disponible en /bin . Mientras que en las máquinas Linux usualmente lo es, hay una gama de otras máquinas POSIX donde bash envía en varias ubicaciones, como /usr/xpg/bin/bash o /usr/local/bin/bash .

Para escribir un script bash portátil, no podemos confiar en la encoding de la ubicación del progtwig bash . POSIX ya tiene un mecanismo para tratar con eso: PATH . La idea es que instale sus progtwigs en uno de los directorios que están en PATH y el sistema debería poder encontrar su progtwig cuando desee ejecutarlo por su nombre.

Lamentablemente, no puedes simplemente hacer esto:

 #!bash 

El kernel no (algunos podrían) hacer una búsqueda PATH por usted. Sin embargo, hay un progtwig que puede hacer una búsqueda PATH para usted, se llama env . Afortunadamente, casi todos los sistemas tienen un progtwig env instalado en /usr/bin . Entonces comenzamos el env usando un camino codificado, que luego hace una búsqueda PATH para bash y lo ejecuta para que pueda interpretar su script:

 #!/usr/bin/env bash 

Este enfoque tiene una desventaja: según POSIX, el hashbang puede tener un argumento . En este caso, usamos bash como argumento para el progtwig env . Eso significa que no tenemos espacio para pasar argumentos a bash . Así que no hay forma de convertir algo como #!/bin/bash -exu en este esquema. Tendrás que poner set -exu después del hashbang en su lugar.

Este enfoque también tiene otra ventaja: algunos sistemas pueden enviarse con /bin/bash , pero al usuario puede no gustarle, puede parecer que tiene errores o está desactualizado, y puede haber instalado su propio bash en otro lugar. Este es a menudo el caso en OS X (Mac) donde Apple envía un /bin/bash obsoleto y los usuarios instalan un /usr/local/bin/bash actualizado usando algo como Homebrew. Cuando utilizas el enfoque env que hace una búsqueda PATH , tomas en cuenta la preferencia del usuario y utilizas su elección preferida sobre la que se envió con el sistema.

Para iniciar el script de shell ‘file.sh’:

 sh file.sh bash file.sh 

Otra opción es establecer el permiso ejecutable usando el comando chmod:

 chmod +x file.sh 

Ahora ejecute el archivo .sh de la siguiente manera:

 ./file.sh 

Para la concha bourne:

 sh myscript.sh 

Para bash:

 bash myscript.sh 

Si desea que la secuencia de comandos se ejecute en el shell actual (por ejemplo, si desea que pueda afectar su directorio o entorno) debe decir:

 . /path/to/script.sh 

o

 source /path/to/script.sh 

Tenga en cuenta que /path/to/script.sh puede ser relativo, por ejemplo . bin/script.sh . bin/script.sh ejecuta el script.sh en el directorio bin bajo el directorio actual.

Primero, da permiso para la ejecución:
chmod +x script_name

  1. Si el script no es ejecutable:
    Para ejecutar el archivo de script sh: –
    sh script_name
    Para ejecutar el archivo de script bash: –
    bash script_name
  2. Si el script es ejecutable:
    ./script_name

NOTA : puede verificar si el archivo es ejecutable o no utilizando ‘ls -a’.

La extensión de archivo .command está asignada a Terminal.app. Al hacer doble clic en cualquier archivo .command, se ejecutará.