O dash, ash e sh script são 100% compatíveis?

16

Eu queria saber se os scripts escritos para dash, ash e sh são 100% compatíveis?

Existem recursos adicionais para traço ou cinzas ou alteração de sintaxe?

Pelo que ouvi, ash é um descendente direto de sh.

user1115057
fonte
cinzas é uma forma listrado para baixo do bash
Joe
4
Fonte? Eu não vi nada que dissesse que as cinzas estão relacionadas ao bash
#
Por que as pessoas não enviam patches para o bash, em vez de criar todos os tipos de conchas, isso me incomoda o tempo todo. Se você realmente quer saber, leia o manual, por exemploman ash
daisy
2
Correto, não é descendente do bash. Seria mais preciso dizer que eles são descendentes de sh (o shell Bourne original), mas isso também não está totalmente correto.
Zlatko
Você pode usar o utilitário checkbashismspara testar se seu script é compatível com POSIX.
donothingsuccessfully

Respostas:

18

A resposta curta é não, eles não são 100% compatíveis.

Mas a maioria das conchas é bem próxima do básico, então você raramente esbarra em inconsistências. De fato, a maioria dos shells diferem pouco devido à sintaxe adicionada, mas por alguns recursos extras, como conclusão de tabulação e similares.

Além disso, dashé uma espécie de descendente de ash- ou porta do BSD para o 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, dashou qualquer outra coisa. O que importa é a conformidade com o POSIX - e quando você escreve scripts de acordo com os padrões, não terá problemas.

A diferença entre essas conchas está em otimizações e desempenho. Eles são menos ricos em recursos bash, mas são conchas totalmente legítimas. O Bash é rico em recursos para trabalho interativo, mas usa mais memória, por exemplo.

Zlatko
fonte
Mas para uso de script, eles são compatíveis?
precisa saber é o seguinte
E sobre a conformidade POSIX, mesmo se eu seguir esse padrão, se um script foi escrito para Bash, eu não acho que será executado em qualquer sh ou seu descendente
user1115057
Eles devem ser compatíveis entre si se você não estiver usando alguns recursos obscuros. Mas se você usar o script bash, poderá ter mais problemas.
Zlatko
nunca pretendeu usar o bash com sh, ash ou dash. Quais são esses recursos obscuros?
user1115057
11
muitos dos recursos mais recentes do bash são adições ao POSIX; portanto, é cada vez mais provável que você escreva códigos não portáveis ​​se os estiver usando. IIRC mesmo a construção [[]] não está em sh. Lembre-se também de que, se você não estiver escrevendo um script shell puro, também haverá diferença nas ferramentas (versões diferentes do sed, grep, awk ...).
Lynxlynxlynx
1

Deve-se mencionar que em alguns sistemas, principalmente o Debian, / bin / ash não está disponível:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash
Steven Penny
fonte
2
Eles podem ter cinzas de ocupado.
Muru