Quando é importante escrever scripts portáveis?

17

A maioria dos códigos que escrevo está no PHP. Recentemente, comecei a aprender scripts de shell. A maioria dos recursos e tutoriais que eu encontrei são específicos para o Bash. Alguns advertem sobre os bashismos e outros não. Eu tenho lido muito aqui e o Stack Overflow.

Sempre que uma resposta usa bashisms , alguém inevitavelmente irá comentar para dizer:

You shouldn't use <insert bashism here>. It's not portable.

Isso acontece mesmo quando a questão foi marcada com bash . Para mim, é como dizer a um programador PHP que eles não deveriam usar código novo no PHP 5 porque ele não pode ser usado com o PHP 4. Ou dizer a alguém que ele não deveria escrever algo para Mac porque não pode ser usado no Windows.

Quando escrevo em PHP, eu escolho um requisito mínimo e escrevo o código forward -compatible. Eu não me preocupo em torná-lo retroativo -compatível.

Se eu usar #!/bin/bash como shebang, por que não devo usar bashisms? Estou começando a ter a impressão de que algumas pessoas simplesmente gostam de bashs (trocadilhos intencionais) apenas por causa disso.

As pessoas geralmente usam bash e shell de forma intercambiável - provavelmente devido ao fato de que o bash é o shell padrão em muitos sistemas. Então eu posso entender adicionando um comentário para avisar que o código usa bashisms, mas eu não entendo a implicação de que é errado usá-los.

Obviamente, se eu estou escrevendo um script estritamente para uso pessoal, posso escrevê-lo em qualquer idioma que eu queira. Mas eu gostaria de pensar que alguns dos códigos que escrevo podem ser úteis para os outros.

Eu tentei procurar uma resposta para minha pergunta antes de postar. Eu encontrei muitas informações sobre como testar a portabilidade, mas não consegui encontrar nada sobre quando importante fazê-lo.

Então, quando é importante escrever scripts portáteis?

Por exemplo,

  • que tipos de scripts devem ser tão portáteis quanto possível?
  • quão comuns são os sistemas que não possuem o Bash instalado?
  • se o sistema tiver o Bash instalado, ele também terá a versão GNU de find e outros utilitários?
por toxalot 14.03.2014 / 06:44

2 respostas

15

Como membro desta comunidade, muitas vezes não vejo pessoas desconsiderando os bashisms para coisas que visam o bash. Quando se fala em portabilidade, os GNUisms são muito piores que os bashisms. Contanto que você use bash para seu shebang, você pode esperar que o script seja executado usando bash . No entanto, você não pode garantir a versão, a menos que você verifique explicitamente. O Bash versão 4 trouxe alguns recursos úteis, como matrizes associativas, mas o Bash v3 ainda é amplamente usado no OS X e no RHEL 5.

what types of scripts should be as portable as possible?

Isso é mais sobre suas necessidades e o que você escolhe para apoiar como desenvolvedor. Se você estiver escrevendo um script de instalação para um aplicativo que suporte todos os tipos de * NIX, a portabilidade será muito importante.

how common are systems that do not have Bash installed?

O FreeBSD e o Solaris 10 são exemplos de sistemas que não vêm com o bash instalado por padrão. A maioria dos sistemas Linux o terá, com exceção dos sistemas embarcados.

if the system has Bash installed, will it also have the GNU version of find and other utilities?

Não, e esse é o verdadeiro problema da portabilidade. Se a portabilidade é importante, você deve usar somente recursos de comando de shell que são definidos pelo padrão POSIX. Os utilitários GNU podem ser instalados em sistemas não-GNU, como o FreeBSD, mas é improvável que sejam os primeiros no PATH, e você não pode confiar nessas ferramentas para serem instaladas.

    
por 14.03.2014 / 07:08
5

So, when is it important to write portable scripts?

what types of scripts should be as portable as possible?

Quando você os usa para o seu ambiente de trabalho, e trabalha (ou poderia no futuro) em máquinas diferentes - E, você não quer ter que reescrever suas ferramentas antes de começar a trabalhar.

por exemplo: um script de lixo / rm substituto

Mark Stewart:

... para o meu kit de ferramentas de solução de problemas, presumo que só terei o vi e o Korn shell. E eu tento usar comandos que funcionam na maioria dos sabores do Unix.

    
por 16.01.2015 / 17:43