Aprenda la diferencia entre abastecimiento y bifurcación en Bash

Aprenda la diferencia entre abastecimiento y bifurcación en Bash

El objetivo principal de este artículo es comprender claramente lo que sucede cuando se ejecuta secuencia de comandos vs fuente. la secuencia de comandos en bash. Primero, entenderemos claramente cómo se envía el programa cuando llame a la secuencia de comandos de diferentes maneras.

NOTA. la creación de la secuencia de comandos con una extensión no importa. La secuencia de comandos se ejecutará bien incluso sin extensiones.

Básicamente, cada secuencia de comandos comienza con una línea llamada shebang (#!). El símbolo Hash. en bash se interpretará como comentarios, pero shebang. tiene un significado especial. Le dice a bash que envíe el programa en cualquier intérprete que hayas mencionado en shebang.

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

$ cat>> Hello_World.sh #!/Usr/bin/env bash echo “Hola mundo” $ chmod + x Hello_world.sh

Ahora para ejecutar el script, puede hacerlo de dos formas.

  • Use una ruta relativa para llamar al script. Vaya al directorio donde está presente el script y ejecute ./Hello_world.sh.
  • Use la ruta absoluta para llamar al script. Desde cualquier lugar del sistema de archivos, escriba la ruta completa al script.

$ ./Hello_world.sh $ pwd $/home/karthick/Hello_world  Ejecutar script de Shell  Ejecutar script de Shell Ejecutar el script de Shell freestar.config.enabled_slots.push (LocationName:” tecmint_incontent “, slotId:” tecmint_incontent “);

Ahora veamos qué sucede cuando intentas enviar tu programa sin shebang. En ausencia de shebang. el programa se enviará a cualquier shell actual con el que esté ejecutando. En mi caso, es Bash. (/bin/bash. .

Permítanme demostrar un ejemplo. Estoy creando una secuencia de comandos de Python sin shebang. y cuando llamo al programa, bash. no sabe que debe 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  Wrong-Interpreter-in-Script  Intérprete incorrecto en el script Intérprete incorrecto en el script

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

# which python3 $ (which python3)/home/karthick/run_py.py  Script de llamada con intérprete  Script de llamada con intérprete Llamar al script con intérprete

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

$ ps-ef–forest | grep-i bash  Bifurcación  Forking Bifurcación

Puede haber varios procesos secundarios como parte del script y eso depende de nuestro código. Cabe señalar que las variables ambientales creadas por subíndice se eliminarán una vez finalizado. Un proceso hijo puede acceder a las variables creadas por el proceso padre exportándolas. Pero el proceso padre no puede acceder a las variables creadas por el proceso hijo.

Eche un vistazo a los artículos a continuación para comprender más sobre cómo funcionan las variables y cómo exportarlas.

  • Comprensión y escritura de ‘variables de Linux’ en secuencias de comandos de Shell
  • Aprenda la diferencia entre $$ y $ BASHPID en Bash

Fuente de la secuencia de comandos

Fuente. ”es un comando integrado de shell que lee el archivo que se le pasa como argumento y ejecuta el código en el entorno de shell actual. Un caso de uso apropiado que usa principalmente es modificar su configuración en .bashrc o .bash_profile y volver a cargar los cambios usando el comando fuente.

$ type-a source  Comando integrado de Shell Shell Comando integrado Comando interno de Shell

Hay dos formas sintácticas de ejecutar el comando fuente. Puede elegir cualquiera de dos sintaxis y es de elección personal.

$ source FILE_NAME [ARGUMENTS] $. FILE_NAME [ARGUMENTS]

Permítanme demostrar cómo funciona realmente la fuente. Voy a crear dos scripts de shell. El primer script ( Module.sh. contendrá algunas variables y funciones. El segundo script ( Main.sh. imprimirá la variable y llamará a la función.

Archivo Module.sh.

# !/usr/bin/env bash VAR1 = $ (echo “Bienvenido a $ 1”) función f1 () echo “Se llama a la función f1”

Archivo Main.sh.

#!/usr/bin/env bash echo $ VAR1 f1  Códigos de secuencia de comandos de muestra  Códigos de secuencia de comandos de muestra Códigos de secuencia de comandos de muestra

Establezca el permiso de ejecución para el script y llame al script principal “main.sh”. Ahora, este script intentará encontrar la función f1 y la variable VAR1 en el entorno de shell actual y fallará con el comando no encontrado.

$ bash main.sh  Antes del script de abastecimiento  Antes de Sourcing Script Antes de Sourcing Script

Ahora ejecutemos el comando fuente dentro del script que cargará la variable y las funciones en el entorno de shell actual y que será accesible por “ main.sh ”.

Archivo Module.sh.

#!/usr/bin/env bash VAR1 = $ (echo “Bienvenido a $ 1”) función f1 () echo “Se llama a la función f1”

Archivo Main.sh.

#!/usr/bin/env bash source module.sh Tecmint echo $ VAR1 f1  Ejemplos de códigos de script con Sourcing Ejemplos de códigos de secuencia de comandos con fuente Muestra de códigos de secuencia de comandos con fuente

Ahora ejecute la secuencia de comandos nuevamente y vea.

$ bash main.sh  After-Sourcing-Script After Sourcing Script After Sourcing Script

La fuente. es muy útil en bash. para 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 se puede utilizar en muchos programas. De esta manera, podemos seguir el principio SECO. ( No te repitas. .

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