¿Cómo ejecuto un script bash en Terminal?

108

Tengo un script bash como:

#!/bin/bash

echo Hello world!

¿Cómo ejecuto esto en la Terminal?

Ballon
fuente
27
¿Tiene permisos de ejecución? Prueba a chmod +x scriptnamey luego ./scriptname.
Dirkgently

Respuestas:

49

$prompt: /path/to/scripty presione enter. Tenga en cuenta que debe asegurarse de que el script tenga permisos de ejecución.

prodigitalson
fuente
1
Si ya está en el /path/to directorio, por ejemplo, con el cd /path/tocomando, puede ingresar ./scriptpara ejecutar su script.No olvide, en este caso, el './' antes del 'script'
FrViPofm
120

Otra forma más de ejecutarlo (esta vez sin configurar los permisos de ejecución):

bash /path/to/scriptname
Pausado hasta nuevo aviso.
fuente
26

cd al directorio que contiene el script, o colócalo en una carpeta bin que está en tu $ PATH

luego escribe

./scriptname.sh

si en el mismo directorio o

scriptname.sh

si está en la carpeta bin.

John Boker
fuente
9
Esto solo funcionará si el script tiene configurado el bit de ejecución. Probablemente sea necesario abordarlo.
Bryan Oakley
./scriptname.shtrabaja para mi pero scriptname.shda scriptname.sh: command not found. -rwxr-xr-xson sus permisos.
Spikatrix
1
El consejo a cdcualquier parte comete otro malentendido común para principiantes. A menos que la secuencia de comandos internamente tenga dependencias que requieran que se ejecute en un directorio en particular (por ejemplo, la necesidad de leer un archivo de datos que la secuencia de comandos inexplicablemente no proporciona una opción para apuntar), nunca debería necesitar ir a cdningún lugar para ejecutarlo, y muy a menudo no querrá.
tripleee
24

Podrías hacerlo:
sh scriptname.sh

xCra2yx
fuente
6
Downvote: Eso es incorrecto si es correctamente un script Bash.
tripleee
1
Voto a favor: Esto está bien en Mac OS X si su script bash está en el mismo directorio
Karl Taylor
30
@kot "Resulta que me funciona" está muy lejos de "esta es una respuesta correcta". Se puede trabajar si shes un enlace simbólico bash, o si la secuencia de comandos no utiliza cualquier construcción específica de Bash. En el primer caso, usar en bashlugar de shes la única solución portátil correcta; en el último caso, no es la respuesta correcta a esta pregunta en particular, porque el OP pidió consejos para un script Bash específicamente. Perpetrar una respuesta incorrecta es irresponsable; los usuarios que no logran captar la diferencia publican frecuentemente aquí, y necesitan que se les muestre por qué esta respuesta "funcionó para mí" no funcionó para ellos.
tripleee
@kraftydevil también ^ Uno de varios objetivos duplicados populares sobre este tema: stackoverflow.com/questions/5725296/…
tripleee
5
@kot Repito: hay situaciones en las que esto funciona (tal como lo descubrió) pero no es una respuesta correcta en el caso general a la pregunta del título. Como mínimo, esta respuesta debería explicar las condiciones en las que funciona; pero mi sugerencia sería simplemente eliminar esta respuesta.
tripleee
14

En primer lugar hay que hacerlo ejecutable usando: chmod +x name_of_your_file_script.

Después de hacerlo ejecutable, puede ejecutarlo usando ./same_name_of_your_file_script

Donald Shahini
fuente
10

Cambie su directorio donde se encuentra el script usando el comando cd

Luego escribe

bash program-name.sh
gaurav07
fuente
6
No hay necesidad de ir a cdningún lado; puede especificar un nombre de ruta arbitrariamente complejo como argumento bash; de hecho, cualquier programa que tenga un argumento de nombre de archivo funciona de esta manera (o está terriblemente roto).
tripleee
10

Este es un hilo antiguo, pero lo encontré y me sorprende que nadie haya dado una respuesta completa todavía. Así que aquí va ...

¡El tutorial de ejecución de un script de línea de comandos!

P: ¿Cómo ejecuto esto en Terminal?

Confusiones y conflictos:

  • Usted no necesita una 'extensión' (como .sh o .py o cualquier otra cosa), pero ayuda a controlar las cosas. No dolerá. Sin embargo, si el nombre del script contiene una extensión, debe utilizarla.
  • No es necesario estar en ningún directorio determinado por ningún motivo.
  • No es necesario que escriba el nombre del programa que ejecuta el archivo (BASH o Python o lo que sea) a menos que lo desee. No dolerá.
  • No es necesario sudoque haga nada de esto. Este comando está reservado para ejecutar comandos como otro usuario o un usuario 'root' (administrador). Gran publicación aquí .

(Una persona que recién está aprendiendo a ejecutar scripts no debería usar este comando a menos que exista una necesidad real, como instalar un nuevo programa. Un buen lugar para poner sus scripts es en su carpeta ~ / bin. Puede llegar allí escribiendo cd ~/bino cd $HOME/bindesde el indicador de la terminal. Tendrás permisos completos en esa carpeta).

Para "ejecutar este script" desde la terminal en un sistema de tipo Unix / Linux, debe hacer tres cosas:

  1. Dígale al sistema la ubicación del script. (elegir uno)

    • Escriba la ruta completa con el nombre del script (por ejemplo /path/to/script.sh). Puede verificar la ruta completa escribiendo pwdo echo $PWDen la terminal.
    • Ejecute desde el mismo directorio y utilícelo ./para la ruta (por ejemplo ./script.sh). Fácil.
    • Coloque el script en un directorio que esté en el sistema PATHy simplemente escriba el nombre (por ejemplo script.sh). Puede verificar el sistema PATHescribiendo echo $PATHo echo -e ${PATH//:/\\n}si desea una lista más ordenada.
  2. Dígale al sistema que el script tiene permiso para ejecutarse. (elegir uno)

    • Establezca el "bit de ejecución" escribiendo chmod +x /path/to/script.shen la terminal.
    • También puede utilizar chmod 755 /path/to/script.shsi prefiere los números. Hay una gran discusión con un gráfico genial aquí .
  3. Dígale al sistema el tipo de script. (elegir uno)

    • Escriba el nombre del programa antes del script. (p. ej., BASH /path/to/script.sho PHP /path/to/script.php) Si el script tiene una extensión, como .php o .py, es parte del nombre del script y debe incluirlo.
    • Use un shebang , que veo que tiene ( #!/bin/bash) en su ejemplo. Si tiene eso como la primera línea de su script, el sistema usará ese programa para ejecutar el script. No es necesario escribir programas ni utilizar extensiones.
    • Utilice un shebang "portátil" . También puede hacer que el sistema elija la versión del programa que está primero en el PATHuso #!/usr/bin/envseguido del nombre del programa (por ejemplo, #!/usr/bin/env basho #!/usr/bin/env python3). Hay pros y contras que se analizan a fondo aquí .
Michael Treanor
fuente
1
Muy buen resumen. Tal vez, en el último ejemplo, recuerde a las personas que script.shy script.phpson los nombres de archivo literales de estos scripts, y que si pones una extensión en el nombre del archivo, debes incluirla cuando ejecutes el script (y viceversa; si el script no lo hace) No tengo una extensión, no ponga una). Esto es diferente, por ejemplo, de DOS, donde puede omitir .bato .exedel nombre del archivo, y los archivos deben tener una extensión de un conjunto pequeño para que se consideren ejecutables.
tripleee
1
Otro error de principiante común está entendiendo mal la diferencia entre path, /path, ./path, y ~/path. Supongo que probablemente no quieras explicarlo aquí, pero tal vez un enlace a una explicación como ... oh diablos, tuve que publicar esto.
tripleee
1

Y una forma más

. /path/to/script

¿Cuál es el significado del punto?

Comer en Joes
fuente
Esto ejecuta la secuencia de comandos en el shell actual, que debe llamarse. Esto no es lo que la mayoría de la gente espera que suceda cuando simplemente ejecuta un script. Esto puede tener efectos secundarios en su entorno actual.
Ingeniero de software
-2

Si se encuentra en un directorio o carpeta donde el archivo de secuencia de comandos está disponible, simplemente cambie el permiso del archivo en modo ejecutable haciendo

chmod +x your_filename.sh

Después de eso, ejecutará el script usando el siguiente comando.

$ sudo ./your_filename.sh

Sobre el "." representan el directorio actual. ¡Nota! Si no se encuentra en el directorio donde está presente el archivo de script bash, cambie el directorio donde se encuentra el archivo utilizando

cd Directory_name/write the complete path

mando. De lo contrario, su secuencia de comandos no se puede ejecutar.

Hassan Shamshir
fuente
Espero que todos hagan esto porque menciono todos los conceptos relacionados con este problema en particular.
Hassan Shamshir
Como se explica en otras respuestas aquí, sudoestá mal y potencialmente terriblemente mal si lo usa en un script que no es de confianza y que abusa de los poderes que le dio innecesariamente.
Triplee el
El consejo de cdalguna parte es difícil de entender, pero probablemente también incorrecto.
tripleee