Outros apontaram que as premissas da pergunta, que o shell Bourne Again é padrão e onipresente, estão totalmente erradas.
Além disso, existem realmente boas razões para usar algo diferente do shell Bourne Again para interpretar scripts de shell. Esses motivos motivaram o grande projeto do Ubuntu e do Debian, ao longo de vários anos, a remover bashisms e a executar o máximo de scripts de shell pela inicialização do sistema (que era um monte de scripts de shell com o System 5 rc
) e a instalação / remoção de pacotes usa o Shell Debian Almquist em vez do shell Bourne Again.
Simplificando: o shell Bourne Again, cheio de recursos interativos, não é o interpretador de shell mais rápido para um script de shell compatível com POSIX. Portanto, se alguém puder fazer seus scripts de shell serem compatíveis com POSIX, interpretando-os com um programa mais leve, como o shell Debian Almquist, o sistema de alguém terá um desempenho melhor. (No final, o Debian teve que fazer pequenos ajustes no shell Almquist, para adicionar suporte a algumas construções de shell não POSIX que eram simplesmente muito profundas e amplamente incorporadas e úteis demais para se livrar.)
O resultado disso tudo foi um grande ganho no desempenho do bootstrap.
Portanto, existem duas classes distintas de shell a serem consideradas aqui:
- Os shells com todos os recursos interativos chamativos, configurados como shells de logon interativo para usuários no banco de dados de contas.
- Os shells que interpretam muitos scripts rapidamente, que são usados como intérpretes de script pelos programas de script de shell.
Observe que falar sobre isso como "preferir /bin/sh
" é simplista demais. O Debian realmente tinha pelo menos dois objetivos:
Em face dos administradores que usam o shell Debian Almquist, o shell Z (no modo POSIX), o shell Bourne Again (no modo POSIX), o shell MirBSD Korn e outros como /bin/sh
, havia…
... tornar os scripts o mais portável possível, para que mudar o que foi /bin/sh
mapeado não estrague as coisas; ou
... criar scripts não portáteis direcione explicitamente o programa de intérprete correto , em vez de simplesmente esperar esse /bin/sh
mapa para ele.
Estava tornando o shell Debian Almquist o mapeamento padrão para o /bin/sh
invés do Bourne Shell, de modo que os scripts que eram compatíveis com POSIX (ou, mais apropriadamente, com conformidade com o Manual de Políticas Debian) rodavam mais rapidamente.
E, é claro, quando alguém entra nisso, pode ir muito além; como considerar as vantagens e desvantagens da eficiência /bin/true
e /usr/bin/clear
ser scripts de shell ou programas compilados. Mas isso está além do escopo desta resposta, felizmente. ☺
Nada disso é muito novo, nem mesmo específico do Unix, é claro. Antes da virada do século, escrevi e publiquei um intérprete de linha de comando que apresentava sabores "interativos" e "não interativos", explicando essa mesma divisão em seu documento e observando a diferença entre as variáveis de ambiente COMSPEC
e OS2_SHELL
. Da mesma forma, a discussão sobre remoção de bashisms no System V do Debian rc
e os scripts de instalação / remoção de pacotes remonta aos anos 90.
Leitura adicional
/bin/sh
se você não usarbash
funções específicas . Um dia você pode ter que usar uma das seu script em um sistema no qual não está instalado (servidor remoto, computador embutido ...)