Diferencia entre comandos en bash script y comandos en terminal

13

¿Hay alguna diferencia entre los comandos que escribe en el terminal y los comandos que incluye en un script?

jth41
fuente
¡Absolutamente no es una pregunta tonta! Mira esto (primero), luego esto y esto .
Emanuel Berg

Respuestas:

7

Su terminal ejecuta un shell (muy probablemente bash), que es el que solicita sus comandos y los ejecuta.

Además de este modo interactivo, también puede usar su shell para ejecutar comandos desde un archivo. Para ejecutar los comandos en su archivo, puede llamar directamente al shell bash scripto puede iniciar su archivo con un "shebang" #!/bin/bashy hacerlo ejecutable ( chmod +x script). Luego puede tratar el script como un binario y ejecutarlo, por ejemplo, como ./scripto ponerlo en un lugar donde su shell lo esté buscando. ( echo $PATH)

Lo más probable es que tanto su shell interactivo como el shell utilizado para ejecutar sean bash. Desde la perspectiva de un bash de "primer día de aprendizaje de Linux", funciona exactamente igual en ambos modos. - Mucho más tarde, podrías tropezar con pequeñas diferencias. Si realmente quiere saber en detalle, le sugiero que lea man bashy busque lugares que mencionen "interactivo". (Puede buscar una página de manual presionando /).

Una cosa importante a tener en cuenta es que el script se ejecuta como un nuevo proceso. Esto significa especialmente que las variables establecidas en el script no son visibles en el shell de llamada.

$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$ 

Sin la exportación ani siquiera es visible para el script interno.

michas
fuente
1

En general, la respuesta sería "no", los comandos en shell son los mismos en scripts, en sintaxis y semántica.

Pero hay un montón de pequeños matices relacionados con la configuración del entorno (qué variables se usan y para qué se configuran).

  • El intérprete interactivo de elección para Linux es fiesta, pero scripting menudo utiliza otros intérpretes ( shque es un precursor de bash, ksh, que está a la par con bash), así que hay que tener en cuenta lo que la cáscara se utiliza (nombre de la shell actual s tradicionalmente se mantiene en variable SHELL, intente escribir echo $SHELL).

  • Puede haber diferencias en la configuración del mismo intérprete para la sesión interactiva y para la ejecución del script.

Dmytro Sirenko
fuente
-1

No. Un script es una lista de comandos que puede escribir en la terminal.

Puede pegar la totalidad de un script en la terminal, y el resultado será el mismo que ejecutarlo.

Inversamente, puede "guardar" sus comandos de terminal dentro de un archivo y convertirlo en un script reutilizable y compartirlo con su familia y amigos.

Mathieu J.
fuente
44
No. Pegar el contenido es equivalente a obtener el script. Esto cambiará todo tipo de opciones en el shell actual, que no se cambiaría simplemente ejecutando el script.
michas
estás en lo correcto. pero en lo que respecta a sus preguntas. Creo que podemos decir que es bastante similar. pero sí, para traducir lo que michas dijo en términos novatos. pegar el contenido del script es equivalente a hacerlo source script_file. que editará ENV vars en el contexto actual. mientras ejecuta el script, ya ./script_fileque no modificará el ENV, a menos que exportse use explícitamente.
Mathieu J.
1
No. Incluso con exportesto, no es posible que un script modifique ninguna variable del shell de llamada. Lo mismo ocurre con cosas como PWD, alias definidos, funciones y cosas así. Se pueden cambiar solo de forma interactiva o buscando un archivo. Pero sí, eso probablemente no sea algo con lo que alguien tropezará el primer día. :)
michas
1
@michas: Bueno, aún es mejor dar la descripción correcta. Si el principiante es ambicioso y tiene hábitos de trabajo, él o ella retomará rápidamente. Si tratamos de contar la historia del niño, simplemente tropezaremos con nuestros pies y causaremos una impresión incomprensible; además, el principiante puede regresar más tarde. Si bien no me considero un principiante, hay muchas cosas que no sé, y me sentiría insultado si alguien ocultara algo respondiendo mis preguntas porque "todavía no estás allí, junior".
Emanuel Berg