Aprenda la diferencia entre abastecimiento y bifurcación en Bash
- 4171
- 762
- Jaime Delgadillo
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_worldEjecutar 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.pyInté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.pyLlame 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 BashBifurcació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 fuenteComando 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 f1Có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.mierdaAntes 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 f1Muestra de códigos de script con abastecimiento
Ahora ejecuta el guión de nuevo y mira.
$ Bash principal.mierdaDespué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.
- « Ebook Introducción de la guía de configuración de virtualización de KVM para Linux
- Cómo dividir la pantalla VIM horizontal y verticalmente en Linux »