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.