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
).
/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
sh script_name
bash script_name
./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á.