A maioria dos códigos que escrevo é em PHP. Recentemente, comecei a aprender scripts de shell. A maioria dos recursos e tutoriais que encontrei são específicos do Bash. Alguns alertam sobre basismos e outros não. Eu tenho lido muito aqui e Stack Overflow.
Sempre que uma resposta usa basismos , alguém inevitavelmente comenta para dizer:
Você não deve usar <inserir basismo aqui>. Não é portátil.
Isso acontece mesmo quando a pergunta foi marcada bash. Para mim, é como dizer a um programador PHP que não deve usar código novo no PHP 5 porque não pode ser usado com o PHP 4. Ou dizer a alguém que não deve escrever algo para Mac porque não pode ser usado no Windows.
Quando escrevo em PHP, escolho um requisito mínimo e escrevo código compatível com a frente . Não me preocupo em torná-lo compatível com versões anteriores .
Se eu uso #!/bin/bash
como shebang, por que não devo usar basismos? Estou começando a ficar com a impressão de que algumas pessoas como a festança bashisms (trocadilho intencional) apenas para o bem dela.
As pessoas freqüentemente usam bash
e shell
intercambiável - provavelmente devido ao fato de que o bash é o shell default em muitos sistemas. Para que eu possa entender adicionando um comentário para avisar que o código usa bashisms, mas não entendo a implicação de que é errado usá-los.
Obviamente, se estou escrevendo um script estritamente para uso pessoal, posso escrevê-lo no idioma que desejar. Mas gostaria de pensar que parte do código que escrevo possa ser útil para outras pessoas.
Tentei procurar uma resposta para minha pergunta antes de postar. Encontrei muitas informações sobre como testar a portabilidade, mas não consegui encontrar nada sobre quando é importante fazer isso.
Então, quando é importante escrever scripts portáteis?
Por exemplo,
- que tipos de scripts devem ser o mais portáveis possível?
- quão comum são os sistemas que não têm o Bash instalado?
- se o sistema tiver o Bash instalado, ele também terá a versão GNU do find e outros utilitários?
bash
etiqueta sozinha, alguém comenta "É basismo e não é portátil". Quando respondo a uma pergunta marcada C
, não me importo se é portátil Java
ou não.
bash
recurso específico, e não portátil, assim como eu indicaria que uma extensão específica do GNU está sendo usada para algum utilitário (mesmo que a pergunta tenha sido marcada como Linux). Eu nunca vi alguém dizer "isso é um basismo e você nunca deve usá-lo".