Diferencia entre GNU Bash y sh

Yo creía que bash y sh eran lo mismo, pero con Debian 12 stable, vi cosas que me dieron a entender que no era así.

#!/bin/sh

Supuestamente llama a sh, cuando se le hizo al archivo

chmod +x "name file"

Y, ese sh, me tira errores, pero cuando puse

#!/bin/bash

Esos errores que me daba dejaban de aparecer.

¿Alguien sabe más de interpretes de terminal para explicar más a fondo esto?
De tener dos interpretes de terminal a la vez en el sistema.

Es cómo que sh es una version simplificada de bash

1 me gusta

Hasta donde sé la mayoría de distros usan un symlink para sh, normalmente a la misma bash, pero otras distros como Debian o Void usan dash, que es una shell muy minimalista y no tiene muchas cosas que son exclusivas de bash, por esto muchos scripts pueden llegar a fallar.

La distro que utilizo usa dash como /bin/sh por usar un ejemplo.
imagen

4 Me gusta
marco@marco:~$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 4 ene  5  2023 /usr/bin/sh -> dash
marco@marco:~$ ls -l /usr/bin/bash
-rwxr-xr-x 1 root root 1265648 abr 18 19:47 /usr/bin/bash

Parece que la mía también usa dask, aunque no se mi otro sistema (Arch).
Pero bash usa bash, y sh usa dash.
Gracias.

2 Me gusta

Por lo que tengo entendido, sh por lo general es un symlink para los shells POSIX-complaint.

No sabría por qué se usa de enlace simbólico a otro shell, ya que en mi caso uso chsh para cambiar de shell, yo tengo a sh de enlace simbólico a busybox, por ejemplo.

Buenas, aquí te lo explican.

Un saludo

Lo mejor es emplear env para mayor compatibilidad y no llamar directamente al binario. No en todas las distribuciones los binarios se encuentran en la misma carpeta.

#!/usr/bin/env bash