Aprenda la diferencia entre abastecimiento y bifurcación en Bash

Aprenda la diferencia entre abastecimiento y bifurcación en Bash

El enfoque principal de este artículo es comprender claramente lo que sucede cuando ejecuta el Script vs Fuente el guión en Bash. Primero, comprenderemos claramente cómo se envía el programa cuando llame al script de diferentes maneras.

NOTA: Crear el script con una extensión no importa. El guión funcionará bien incluso sin extensiones.

Básicamente, cada guión comienza con una línea llamada el asunto(#!). El Picadillo El símbolo en Bash se interpretará como comentarios pero el asunto tiene un significado especial. Le dice a Bash que envíe el programa en cualquier intérprete que haya mencionado en el asunto.

A continuación hay un programa de muestra y estoy especificando a Bash como mi intérprete.

$ cat >> hello_world.sh #!/usr/bin/env Bash echo "Hello World" $ chmod +x hello_world.mierda 

Ahora para ejecutar el script, puedes hacerlo de dos maneras.

  • Use una ruta relativa para llamar al script. Moverse al directorio donde el script está presente y ejecutar ./Hola Mundo.mierda.
  • Use la ruta absoluta para llamar al script. Desde cualquier lugar del sistema de archivos, escriba la ruta completa al script.
ps ./Hola Mundo.sh $ pwd $/home/karthick/hello_world 
Ejecutar el script de shell

Ahora veamos qué sucede cuando intente enviar su programa sin el asunto. En ausencia de el asunto, El programa se enviará a cualquier shell actual con el que esté ejecutando, en mi caso, es Intento (/bin/bash).

Déjame demostrar un ejemplo. Estoy creando un script de Python sin el asunto y cuando llamo al programa, intento no sabe que debería enviar este programa al intérprete de Python, en su lugar, ejecutará el programa en el shell actual.

$ Cat> Run-Py.py echo $ shell print ("hola mundo") $ chmod +x run-py.Py $ ./Run-Py.py 
Intérprete incorrecto en el script

En este caso, puede llamar al programa mencionando a qué intérprete debe enviarse o simplemente agregar el el asunto línea que siempre se recomienda.

# ¿Qué python3 $ (que python3)/home/karthick/run_py.py 
Llame script con intérprete

Ahora que sabe cómo llamar al script, el siguiente paso sería entender lo que sucede cuando llamamos el script. Cuando invoca el script como se muestra en los ejemplos anteriores, creará un proceso infantil (bifurcación) y el script se enviará al proceso infantil. Ejecuté un script de muestra que solo ejecutará el siguiente comando y muestra que el script se envía a un proceso infantil.

$ PS -EF --forest | Grep -i Bash 
Bifurcación

Puede haber múltiples procesos infantiles como parte del script y eso depende de nuestro código. Cabe señalar que las variables ambientales creadas por el subíndice se eliminarán una vez que se termine. Un proceso infantil puede acceder a variables creadas por el proceso principal exportándolas. Pero el proceso principal no puede acceder a las variables creadas por el proceso infantil.

Eche un vistazo a los siguientes artículos para comprender más cómo funcionan las variables y cómo exportar las variables.

  • Comprender y escribir 'Variables de Linux' en scripting de shell
  • Aprenda la diferencia entre $$ y $ Bashpid en Bash

Ajuste el guión

"Fuente"Es un comando incorporado de shell que lee el archivo que se le pasa como un argumento y ejecuta el código en el entorno de shell actual. Un caso de uso apropiado que use principalmente es modificar su configuración en .bashrc o .bash_profile y recargar los cambios utilizando el Comando de origen.

$ tipo -a fuente 
Comando de shell Builtin

Hay dos formas sintácticas de ejecutar el Comando de origen. Puede elegir a cualquier persona de dos sintaxis y es de elección personal.

$ fuente file_name [argumentos] $ . File_name [argumentos] 

Permítanme demostrar cómo funciona realmente la fuente. Voy a crear dos scripts de shell. El primer guión (Módulo.mierda) tendrá algunas variables y funciones. El segundo script (Principal.mierda) va a imprimir la variable y llamar a la función.

Archivo Módulo.mierda.

#!/usr/bin/env Bash var1 = $ (echo "bienvenido a $ 1") función f1 () echo "la función f1 se llama" 

Archivo Principal.mierda.

#!/usr/bin/env bash echo $ var1 f1 
Códigos de script de muestra

Establezca el permiso de ejecución para el script y llame al script principal "principal.mierda. Ahora, este script intentará encontrar la función F1 y variable Var1 en el entorno de shell actual y fallará con el comando no encontrado.

$ Bash principal.mierda 
Antes de obtener el guión

Ahora ejecutemos el comando de origen dentro del script que cargará la variable y las funciones en el entorno de shell actual y que se puede acceder por "principal.mierda.

Archivo Módulo.mierda.

#!/usr/bin/env Bash var1 = $ (echo "bienvenido a $ 1") función f1 () echo "función f1 se llama" 

Archivo Principal.mierda.

#!/usr/bin/env Bash Módulo fuente de Bash.sh tecmint echo $ var1 f1 
Muestra de códigos de script con abastecimiento

Ahora ejecuta el guión de nuevo y mira.

$ Bash principal.mierda 
Después de obtener un script

El fuente es muy útil en intento seguir el enfoque de programación modular en la creación de nuestros scripts de shell. Podemos dividir nuestro código en módulos más pequeños y podemos usarse en muchos programas. De esta manera, podemos seguir el SECO (No te repitieras) Principio.

Eso es todo para este artículo. Hemos discutido brevemente la diferencia entre abastecimiento y bifurcación en Bash. Revise el artículo y comparta sus valiosos comentarios con nosotros.