É possível emular versões antigas do Bash?

3

É possível emular (é a palavra certa?) versões anteriores do Bash?

Estou usando o 4.3.11, e estou curioso para saber se meus scripts são compatíveis com algumas versões anteriores, mas não quero realmente instalar uma versão anterior. Eu poderia vasculhar os changelogs e descobrir quais recursos eu estou usando que estão faltando em versões anteriores, mas isso parece um pouco entediante. Eu estava esperando por algum tipo de opção de linha de comando mágica ou comando de script, em vez disso (wishful thinking, provavelmente).

    
por Andy Forceno 17.09.2015 / 06:42

2 respostas

3

Não, o bash não pode emular versões mais antigas do bash. Mas é muito fácil configurar um ambiente de teste que inclua uma versão mais antiga do bash.

A instalação da versão mais antiga do software individual é entediante se você precisar instalar cada pacote de software manualmente, sem mencionar a resolução das incompatibilidades da biblioteca. Mas há uma solução mais fácil: instale uma distribuição mais antiga . A instalação de uma distribuição mais antiga, com um conjunto consistente de software, incluindo pacotes de desenvolvimento, custa cerca de US $ 1 em espaço no disco rígido e talvez uma hora para ser configurada pela primeira vez.

O pacote schroot facilita a instalação de uma distribuição Linux mais antiga (ou mais recente!) em execução no mesmo sistema que o seu sistema Linux normal. Você pode facilmente fazer uma configuração do schroot onde você pode executar um programa em um ambiente (um chroot ) onde os diretórios do sistema apontam para o software mais antigo, mas os diretórios base são os do ambiente normal. Eu escrevi um guia para distribuições baseadas no Debian ; você pode facilmente voltar ao Debian Slink (com o bash 2.01.01) desta forma.

Se você deseja testar com variantes diferentes do Unix, diferentes arquiteturas de CPU ou software muito antigo, é possível executar outros sistemas operacionais em uma máquina virtual. Há um pouco mais de sobrecarga (em RAM, espaço em disco, CPU e manutenção), mas ainda é muito factível.

    
por 18.09.2015 / 03:24
2

Escreva seus scripts de uma maneira compatível com POSIX e, em seguida, teste com um shell completamente diferente, como dash , zsh , pdksh ou o que você tem. Evite cantos escuros e áreas cinzentas da linguagem shell; fazer tudo de maneira "canônica".

É claro que isso não prova que seu código não esteja interferindo em algum erro de Bash em uma versão antiga, mas melhora a confiança. Por um lado, os bugs do Bash são mais provavelmente encontrados em construções específicas do Bash (que não são exercidas por scripts portáveis) e nesses cantos escuros e áreas cinzas (que não são exercidas por muitos scripts).

Em outras palavras, não seja o primeiro shell script do mundo a conseguir um teste reverso quádruplo.

Um benefício de tornar o script portátil é que, suponha que um usuário descubra que seu script não funciona em sua instalação que possui um Bash mais antigo. Bem, uma vez que o script não é específico do Bash, talvez eles possam fazer com que ele funcione com um shell alternativo, e um que eles já tenham instalado.

Existem apenas duas maneiras de saber se seu código é executado em algum bug específico do Bash. Apenas uma dessas maneiras é meio confiável (aquela que você não quer fazer: extrair versões antigas do Bash e testar). A outra maneira é examinar o histórico de alterações do Bash e tentar determinar se os bugs existentes em qualquer versão antiga de que você gosta podem estar afetando algo que seu script está fazendo.

Gostaria apenas de manter uma máquina virtual hospedando uma distribuição mais antiga e fazer um teste de regressão nela de tempos em tempos.

    
por 17.09.2015 / 20:22

Tags