como executar várias versões de um shell em uma única máquina

4

Para testar alguns scripts 1 em tantos ambientes quanto possível, configurei várias VMs com UNIX (ou sistemas operacionais semelhantes a Unix):

  • Linux
  • Solaris
  • OS X 2
  • FreeBSD

Eu assumo, porém, que em muitos aspectos é realmente mais importante testar usando versões diferentes de cada shell com as quais eu planejo me preocupar, do que testar usando sistemas operacionais diferentes.

Como eu prefiro não ter minhas VMs multiplicadas em permutações aparentemente infinitas, gostaria de instalar várias versões de cada shell em qualquer VM específica. Por exemplo, se eu testar em [:bash,:zsh,:fish,:ksh,:csh,:tcsh,:sh,:dash,:ash] , então eu tenho 9 shells, e se você assumir que eu estou testando uma média de 3 versões de cada, então eu tenho mais de 100 VMs:

# operating_systems * shells * shell_versions
            4       *   9    *     3

Existe alguma maneira prática de instalar e usar várias versões de um determinado shell em uma única máquina ou máquina virtual? Posso (por exemplo) instalar o Bash 1, o Bash 2, o Bash 3 e o Bash 4 em uma VM Linux?

Eu percebo que

  1. algumas combinações são menos importantes e provavelmente podem ser ignoradas, e
  2. Por fim, gostaria de testar várias versões de cada sistema operacional também

mas essas são realmente separadas dessa questão, então estou colocando essas questões de lado para considerar se isso é possível:

Então: existe alguma maneira prática de instalar e usar várias versões de um determinado shell em uma única máquina?

1 Eu estou usando o termo "script" vagamente. Uma das primeiras coisas que quero testar é algo que será originado pelos arquivos rc do seu shell, seja .zshrc , .bash_profile , ou o que for, para que não tenha sua própria linha de shebang. Daí o desejo de fazer um pouco de código funcionar em vários shells. Outras coisas que seriam úteis através de shells seriam funções e aliases que eu gostaria de usar em máquinas diferentes, embora eles não necessariamente tenham o meu shell favorito (Z Shell), mas podem me fazer usar Bash ou Korn. Também quaisquer trechos úteis que eu possa querer usar em scripts de shell em várias máquinas, mesmo quando não posso colocar meu shell favorito na linha shebang.

2 Nota totalmente tangencial, incluída apenas para não dizer nada enganosa: na verdade, não consegui configurar o OS X VM, já que isso é um incômodo, mas Eu espero, e incluí-lo na lista, então ninguém diria "Ei! Por que você não está incluindo o OS X!?"

    
por iconoclast 18.11.2014 / 19:20

1 resposta

3

Se você tiver prazer em criar a partir do código-fonte, poderá instalar cada versão em um prefixo separado e, em seguida, ajustar o caminho em seus scripts.

bash, fish, ksh, tcsh, zsh e dash suportam o argumento --prefix para configurar, para que você possa fazer o download de cada versão, execute ./configure --prefix=/opt/SHELL-VERSION; make; make install . Então, para usar cada versão, defina PATH para ter /opt/SHELL-VERSION/bin na frente.

csh é um pouco diferente e exigirá mais trabalho manual; Se você tem certeza que quer, você pode extrair os fontes da árvore fonte do FreeBSD e editar o Makefile, mas a maioria das pessoas realmente usa o tcsh de qualquer maneira.

Eu não acho que exista uma fonte canônica de cinzas, mas provavelmente terá uma maneira semelhante de fazer as coisas.

    
por 19.11.2014 / 05:02