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.


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.


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

2
Eles podem ter cinzas de ocupado.
— Muru
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.