¿Qué es #! / Bin / bash en scripts de shell? ¿Cuál es la diferencia entre / bin / sh y / bin / bash? ¿Por qué algunas veces, el script de shell funciona sin las líneas?


Mejor respuesta

#!/bin/bash

Esto se conoce como shebang, le dice al intérprete que las siguientes líneas están escritas para bash, así que ejecute este archivo como script bash.

#Example: Scripts are usually executed like below:

./scriptName

Entonces el shebang determina cómo interpretar el script, a veces puede ser como sigue:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Por tanto, estas líneas determinan cómo deben ser interpretado y ejecutado. ahora llega a ¿Por qué /bin/sh?

Apunta a uno de los shell configurados, a veces sh apunta a bash, en algún momento algún otro shell como cshell, dash,zsh ,ksh etc.

Ejemplo:

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

Entonces, en caso de que esté usando #!/bin/sh en su secuencia de comandos, el comportamiento de su secuencia de comandos será diferente según el shell sh apunta a su sistema. Tenga en cuenta que puede anular el shebang ejecutando su secuencia de comandos como:

bash scriptName

#or

sh scriptName

En los dos casos anteriores, shebang no afectará la ejecución y lo hará bash y sh (shell apuntado por esto).

Respuesta

Bueno, exactamente cómo funcionan muchos niveles de detalle, por lo que seremos bastante inexactos aquí. Todos los programas se ejecutan colocando su código en una sección de memoria específica y dedicada, y luego invocando el punto de entrada de esa imagen de código en memoria. Después de eso, el programa simplemente se ejecuta.

El acto de poner la imagen del código en la memoria lo realiza el Sistema Operativo y es lo que llamamos «lanzar» o ejecutar el programa. El sistema operativo lo hace por iniciativa propia solo una vez; en el momento del arranque cuando inicia el proceso init . El proceso init y sus descendientes solicitan al SO que inicie otros procesos, invocando el exec Llamada al sistema operativo.

El shell es a la vez especial y también ordinario. Es simplemente otro programa que se ejecuta, como cualquier otro. No tiene superpoderes ni propiedades especiales en particular. Tiene el propósito de permitir al usuario acceder a los servicios del SO, principalmente para ejecutar otros programas que el usuario especifique. Proporciona métodos accesibles para el usuario que le permiten acceder al sistema de archivos y especificar cómo se utilizan algunos flujos estándar de comunicación de datos ( stdin , stdout y stderr ).

Los shells proporcionan un lenguaje de programación que se puede utilizar para hacer las cosas de forma automatizada, tomando decisiones e iterando, para lograr eficiencia, y para que puedan funcionar sin la interacción del usuario. Proporcionan y utilizan una sintaxis y una notación especial que el usuario debe aprender y utilizar para invocar el lenguaje de programación y el procesamiento de la línea de comandos. El procesamiento de los comandos del shell puede provenir de una terminal interactiva o de archivos de texto que contienen scripts.

Los programas que lanza un shell se denominan procesos secundarios del shell. Cualquier proceso puede iniciar otro proceso, por lo que el shell no es especial en ese sentido. El shell está optimizado para permitir al usuario especificar cómo iniciar sus procesos secundarios. Puede ver la jerarquía de todos los procesos en un host Linux usando el comando

ps -e lf

En algún lugar de la lista encontrará el proceso ps en sí mismo, y aparecerá como un proceso hijo del proceso de shell que utilizó para iniciarlo.

Allí son muchos más detalles; demasiados para cubrirlos en una respuesta de Quora.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *