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

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

  • ash é uma forma listrada de bash
  • Fonte? Não vi nada que dissesse que o ash está relacionado ao bash
  • Por que ' as pessoas simplesmente enviariam patches para o bash em vez de criar todos os tipos de shells, isso me deixa confuso o tempo todo. Se você realmente deseja saber, leia o manual, por exemplo, man ash
  • Correto, ele ' não é descendente de bash. Seria mais preciso dizer que eles ' são descendentes de sh (o shell Bourne original), mas que ' também não está totalmente correto .
  • Você pode usar o utilitário checkbashisms para testar se seu script é compatível com POSIX.

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *