¿Cuál es la diferencia entre #!/bin/sh #y!/ bin / bash?

En Linux y otros sistemas tipo Unix, puede elegir entre varios shells.

El shell es responsable no solo de dibujar su pequeño mensaje, sino de interpretar sus comandos, especialmente si pone lógica complicada como tuberías, condicionales, etc.

bash es el shell más común utilizado como shell predeterminado para los usuarios de sistemas Linux. Es un descendiente espiritual de otros shells utilizados a lo largo de la historia de Unix. Su nombre, bash, es una abreviatura de Bourne-Again Shell, un homenaje a la Bourne shell para la que fue diseñada, aunque también incorpora características de la C Shell y la Korn Shell.

Se ejecuta, en estos días, desde /bin/bash – cualquier sistema con bash lo tendrá accesible aquí.

Sin embargo, no son solo los usuarios los que usan shells. Los scripts (scripts de shell) necesitan shells para interpretarlos. Cuando ejecuta un script de shell, su sistema necesita iniciar un proceso de shell para ejecutar su script.

El problema es que los diferentes shells tienen pequeñas inconsistencias entre ellos, y cuando se trata de ejecutar scripts, estos pueden ser un problema real. bash tiene un montón de funciones de scripting que solo son exclusivas de bash, y no de otros shells. Esto está bien, si siempre vas a usar bash para ejecutar esos scripts. Otros proyectiles pueden intentar emular a bash o adherirse al estándar POSIX, que bash soporta bastante bien (aunque añade sus propias extensiones).

Es posible especificar en la parte superior de un script de shell con qué shell se debe ejecutar usando un shebang. Un script puede especificar #!/bin/bash en la primera línea, lo que significa que el script siempre debe ejecutarse con bash, en lugar de otro shell.

/bin / sh es un ejecutable que representa el shell del sistema. En realidad, generalmente se implementa como un enlace simbólico que apunta al ejecutable para cualquier shell que sea el shell del sistema. El shell del sistema es el shell predeterminado que deben usar los scripts del sistema. En las distribuciones de Linux, durante mucho tiempo este fue un enlace simbólico a bash, tanto que se ha convertido en una convención vincular siempre / bin / sh a bash o a un shell compatible con bash. Sin embargo, en los últimos dos años Debian (y Ubuntu) decidieron cambiar el shell del sistema de bash a dash, un shell similar que rompe con una larga tradición en Linux (bueno, GNU) de usar bash para /bin/sh. Dash es visto como un shell más ligero y mucho más rápido que puede ser beneficioso para la velocidad de arranque (y otras cosas que requieren muchos scripts de shell, como los scripts de instalación de paquetes).

Dash es bastante compatible con bash, ya que se basa en el mismo estándar POSIX. Sin embargo, no implementa las extensiones específicas de bash. Existen scripts que usan #!/bin/sh (el shell del sistema) como su shebang, pero que requieren extensiones específicas de bash. Esto se considera actualmente un error que debería ser corregido por Debian y Ubuntu, que requieren / bin / sh para poder funcionar cuando se apunta a dash.

A pesar de que el shell del sistema de Ubuntu está apuntando a dash, su shell de inicio de sesión como usuario sigue siendo bash en este momento. Es decir, cuando inicie sesión en un emulador de terminal en cualquier lugar de Linux, su shell de inicio de sesión será bash. La velocidad de operación no es tanto un problema cuando el shell se usa interactivamente, y los usuarios están familiarizados con bash (y pueden tener personalizaciones específicas de bash en su directorio personal).

Qué debe usar al escribir scripts

Si su script requiere funciones que solo sean compatibles con bash, use #!/bin/bash.

Pero si es posible, sería bueno asegurarse de que su script es compatible con POSIX, y usar #!/bin/sh, que siempre debería, de manera bastante confiable, apuntar al shell de sistema compatible con POSIX preferido en cualquier instalación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.