script run mac ejecutar desde consola archivo linux bash macos shell unix

linux - run - mac terminal sh



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

En primer lugar, dar 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 : -puedes verificar si el archivo es ejecutable o no usando ''ls -a''

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


La extensión de archivo .command se asigna a Terminal.app. Haciendo doble clic en cualquier archivo .command lo ejecutará.


Para iniciar el shell-script ''file.sh'':

sh file.sh bash file.sh

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

chmod +x file.sh

Ahora ejecute el archivo .sh de la siguiente manera:

./file.sh


Para la cáscara bourne:

sh myscript.sh

Para el bash:

bash myscript.sh


Si desea que la secuencia de comandos se ejecute en el shell actual (por ejemplo, desea que pueda afectar a 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.


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); simplemente lo especificas por su ruta:

/foo/bar /bin/bar ./bar

Para hacer un script ejecutable, dale el permiso necesario:

chmod +x bar ./bar

Cuando un archivo es ejecutable, el núcleo es responsable de descubrir 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 kernel qué programa ejecutar (en este caso, el comando /usr/bin/env se ejecuta con el argumento bash ). Luego, el script se pasa al programa (como segundo argumento) junto con todos los argumentos que dio al script como argumentos posteriores.

Eso significa que cada script que sea ejecutable debe tener un hashbang . Si no lo hace, no le está diciendo al kernel qué es y, por lo tanto, el kernel no sabe qué programa usar para interpretarlo. Podría ser bash , perl , python , sh , o algo más. (En realidad, el kernel a menudo usará el shell predeterminado del usuario para interpretar el archivo, lo cual es muy peligroso porque puede que no sea el intérprete adecuado o podría analizarlo, pero con sutiles diferencias de comportamiento, como el caso entre sh y bash ).

Una nota en /usr/bin/env

Lo más común es que veas explosiones de hash así:

#!/bin/bash

El resultado es que el kernel ejecutará el programa /bin/bash para interpretar el script. Desafortunadamente, bash no siempre se envía de forma predeterminada, y no siempre está disponible en /bin . Mientras que en las máquinas con Linux suele ser así, hay una variedad 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 de bash portátil, por lo tanto, no podemos confiar en la codificación del lugar del programa bash . POSIX ya tiene un mecanismo para lidiar con eso: PATH . La idea es que instale sus programas en uno de los directorios que están en PATH y el sistema debería poder encontrar su programa cuando desee ejecutarlo por su nombre.

Lamentablemente, no puedes simplemente hacer esto:

#!bash

El kernel no hará (algunos podrían) hacer una búsqueda de PATH por ti. Sin embargo, hay un programa que puede hacer una búsqueda de PATH , se llama env . Afortunadamente, casi todos los sistemas tienen un programa env instalado en /usr/bin . Así que comenzamos env usando una ruta codificada, que luego realiza una búsqueda PATH para bash y la ejecuta para que pueda interpretar su script:

#!/usr/bin/env bash

Este enfoque tiene un inconveniente: según POSIX, el hashbang puede tener un argumento . En este caso, usamos bash como el argumento del programa env . Eso significa que no tenemos espacio para pasar argumentos para bash . Así que no hay manera de convertir algo como #!/bin/bash -exu a 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 un /bin/bash , pero al usuario no le gusta, puede encontrar que está defectuoso o desactualizado, y puede haber instalado su propio bash en otro lugar. Este suele ser 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 utiliza el enfoque env que realiza una búsqueda PATH , tiene en cuenta las preferencias del usuario y utiliza su golpe preferido sobre el sistema con el que se envió.