sh puede significar Bourne shell o / bin / sh, que es algún otro shell (compatible con POSIX) en la mayoría de las plataformas modernas. "El shell POSIX" es el shell abstracto definido por POSIX , que se implementa mediante bash en modo POSIX, o ksh o dash por defecto. / bin / sh a veces también se denomina shell POSIX, porque es un shell que se ajusta a POSIX en la mayoría de las plataformas. Los proyectiles Bourne originales no son proyectiles POSIX.
bashref tiene una lista de diferencias entre bash y los shells Bourne . man bash
tiene una lista de cambios cuando se invoca bash en modo POSIX .
/ bin / sh no es un enlace simbólico o un enlace duro en OS X, pero es casi del mismo tamaño que / bin / bash:
$ ls -li /bin/{ba,}sh
29631757 -r-xr-xr-x 1 root wheel 1333920 Jul 26 01:52 /bin/bash
29631758 -r-xr-xr-x 1 root wheel 1334000 Jul 26 01:52 /bin/sh
hombre bash :
Si se invoca bash con el nombre sh, intenta imitar el comportamiento de inicio de las versiones históricas de sh lo más cerca posible, a la vez que se ajusta al estándar POSIX.
La imitación de las conchas de Bourne es bastante limitada. bash +B
(Bourne) en realidad deshabilitaría características como la expansión de llaves.
$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}
Pero incluso si deshabilita el modo POSIX, echo se comporta de manera echo -e
predeterminada:
$ sh
$ shopt -uo posix
$ echo '1\b2'
2
/ bin / sh es dash en Ubuntu , por lo que algunos bashismos funcionan con / bin / sh en OS X pero no Ubuntu.
Si realmente desea escribir scripts para (algo así como) los shells Bourne originales, puede usar #!/usr/bin/env bash +B
en su lugar.
Creo que es más fácil escribir scripts para bash que evitar funciones que no son parte de las especificaciones POSIX o shells Bourne o probar todo con otros shells.
sh
ybash
): http://en.wikipedia.org/wiki/Comparison_of_command_shells