sh pode significar shell Bourne ou / bin / sh, que é algum outro shell (compatível com POSIX) na maioria das plataformas modernas. "O shell POSIX" é o resumo shell definido pelo POSIX , que é implementado pelo bash no POSIX modo, ou ksh ou traço por padrão. O / bin / sh às vezes também é chamado de shell POSIX, porque é um shell que está em conformidade com o POSIX na maioria das plataformas. As conchas Bourne originais não são cartuchos POSIX.
O bashref tem uma lista de diferenças entre bash e Bourne conchas . man bash
tem uma lista de alterações quando o bash é invocado no modo POSIX .
/ bin / sh não é um symlink ou hard link no OS X, mas é quase do mesmo tamanho que o / 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
homem bash :
If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.
A imitação de conchas Bourne é, de outro modo, bastante limitada. bash +B
(Bourne) realmente desabilitaria recursos como expansão de contraventamento.
$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}
Mas mesmo que você desative o modo POSIX, o echo se comporta como echo -e
por padrão:
$ sh
$ shopt -uo posix
$ echo '1\b2'
2
/ bin / sh é traço no Ubuntu , então alguns bashisms funcionam com / bin / sh no OS X mas não no Ubuntu.
Se você realmente quiser escrever scripts para (algo como) os shells originais de Bourne, você pode usar #!/usr/bin/env bash +B
.
Acho mais fácil escrever scripts para o bash do que evitar recursos que não fazem parte das especificações POSIX ou Bourne shells ou testar tudo com outros shells.