Eu queria saber se os scripts escritos para dash, ash e sh são 100% compatíveis?
Há algum recurso adicionado ao traço ou ash, ou mudança de sintaxe?
Pelo que ouvi, ash é um descendente direto de sh.
Comentários
Resposta
A resposta curta é não, eles “não é 100% compatível.
Mas a maioria dos shells são muito próximos do básico, então você raramente encontraria inconsistências. Na verdade, a maioria dos shells não difere muito pela sintaxe adicionada, mas por alguns recursos extras, como preenchimento de tabulação e similares.
Além disso, dash
é uma espécie de descendente de ash
— ou porta de BSD para Linux, para ser mais preciso. E todos eles devem ser descendentes ou diferentes implementações de sh
. Na verdade, sh
na maioria dos sistemas é apenas um link simbólico para bash
, dash
ou qualquer outra coisa. O que importa é a conformidade POSIX — e quando você escreve scripts de acordo com os padrões, você não terá problemas.
A diferença entre esses shells está nas otimizações e desempenho. Eles são menos ricos em recursos do que bash
, mas são shells totalmente legítimos. O Bash é rico em recursos para trabalho interativo, mas usa mais memória, por exemplo.
Comentários
- Mas para uso de script, eles são compatíveis?
- E sobre a conformidade POSIX, mesmo que eu siga esse padrão, se um script for escrito para Bash, não acho que ele será executado em nenhum sh ou seu descendente
- Eles devem ser compatíveis uns com os outros se você ' não estiver usando alguns recursos obscuros. Mas se você usar o script bash, poderá ter mais problemas.
- nunca teve a intenção de usar o bash com sh ou ash ou traço. Quais são esses recursos obscuros?
- muitos dos recursos mais novos do ' do bash são adições ao POSIX, então é cada vez mais provável que você escreva código não portável se ' reutilizá-los. IIRC mesmo o construto [[]] não está em sh. Também tome cuidado, pois se você ' não estiver escrevendo um script de shell puro, a diferença nas ferramentas também entrará em jogo (versões diferentes de sed, grep, awk …).
Resposta
Deve ser mencionado que em alguns sistemas, notavelmente Debian, / bin / ash não está disponível:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Comentários
- Eles podem ter ash do busybox.
- Dito isso, há muitos sistemas que também não ' têm
bash
.
man ash
checkbashisms
para testar se seu script é compatível com POSIX.