Um executável sh
é um requisito para sistemas operacionais contemporâneos semelhantes ao Unix. Existem vários padrões (por exemplo, POSIX ) ditando o que isso significa, embora desde "unix-like" não significa necessariamente "certificado compatível" com qualquer coisa, a realidade varia um pouco. Em geral, eles pelo menos implementam algo compatível com o sh
, o shell Bourne original. É por isso que sh
é geralmente um link simbólico , e "sh" é melhor compreendido hoje como um padrão para o comportamento de tudo o que ele liga.
bash
é o Bourne Again Shell , que é o que o sh
geralmente vincula em Sistemas GNU / Linux (mas existem outras possibilidades, como dash
e ash
).
O Bash inclui todos os recursos do sh e é destinado a fornecer compatibilidade retroativa para scripts sh. Aparentemente, há algumas possíveis falhas obscuras nessa compatibilidade, mas elas provavelmente não são muito significativas.
Portanto, em termos de funcionalidade, o bash estende sh; Ele faz tudo um sh
e muito mais. Outra implementação sh estendida popular que também satisfaz POSIX é o KornShell , ksh
.
A outra linhagem de shell de comando de propósito geral ainda usada no mundo * nix é shell C , csh
. O shell C, no entanto, não é compatível com o código sh, e uma implementação nunca seria vinculada a sh
.