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

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

Para testar alguns scripts 1 no maior número possível de ambientes, configurei várias VMs com UNIX (ou sistemas operacionais semelhantes ao Unix):

  • Linux
  • Solaris
  • OS X 2
  • FreeBSD

Presumo, porém, que, de muitas maneiras, é realmente mais importante testar usando versões diferentes de cada shell com o qual pretendo me preocupar, do que testar usando sistemas operacionais diferentes.

Como prefiro que minhas VMs não se multipliquem em permutações aparentemente infinitas, gostaria de instalar várias versões de cada shell em qualquer VM. Por exemplo, se eu testar [:bash,:zsh,:fish,:ksh,:csh,:tcsh,:sh,:dash,:ash], tenho 9 shells e, se você assumir que estou testando uma média de 3 versões de cada, 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, Bash 2, Bash 3 e Bash 4 em uma VM Linux?

eu percebo isso

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

mas essas questões são realmente separadas desta questão, então estou deixando 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 Estou usando o termo "script" vagamente. Uma das primeiras coisas que quero testar é algo que será originado dos rcarquivos shell de alguém, seja .zshrc, .bash_profile, ou qualquer outro, para que não tenha sua própria linha shebang. Daí o desejo de fazer um pedaço de código funcionar em vários shells. Outras coisas que seriam úteis em shells seriam funções e aliases que eu gostaria de usar em máquinas diferentes, embora nem todos tenham necessariamente meu shell favorito (Z Shell), mas podem me fazer usar Bash ou Korn. Além disso, quaisquer trechos úteis que eu queira usar em scripts de shell em várias máquinas, mesmo quando não consigo colocar meu shell favorito na linha shebang.

2 Nota totalmente tangencial, incluída apenas para não dizer nada enganoso: na verdade, não configurei a VM do OS X, pois isso é um grande incômodo, mas espero que sim, e a incluí na lista para que ninguém diria "Ei! Por que você não está incluindo o OS X !?"

Responder1

Se você quiser compilar a partir do código-fonte, poderá instalar cada versão em um prefixo separado e ajustar o caminho em seus scripts de acordo.

bash, fish, ksh, tcsh, zsh e dash suportam o --prefixargumento para configurar, então você pode baixar cada versão, executar ./configure --prefix=/opt/SHELL-VERSION; make; make install. Então, para usar cada versão, defina PATH para ter /opt/SHELL-VERSION/binna frente.

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

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

Responder2

Como disse Zanchey, você pode instalar cada versão do shell em seu próprio prefixo. Se quiser colocá-los em seu PATH, você pode renomeá-los e copiá-los para /usr/bin/. Por exemplo:

$ bash1
bash-1.0$ ./myscript.sh
# Code here.
bash-1.0$ bash2
# And so on...
user@user-MacBook-Pro:~$ zsh1
# and again until you finish...
user@user-MacBook-Pro ~> exit
# Don't just skip into shells, or deal with the exit. Or just spam ^D.
$ exit

Responder3

asdffoi projetado especificamente para "gerenciar várias versões de tempo de execução com uma única ferramenta CLI", seja esse tempo de execução uma linguagem, um shell ou qualquer outra coisa. Tem umplugin para Zsh, então isso deve ser muito mais conveniente do que criar sua própria solução.

Atualizar Embora asdfpossa ser mais conveniente, ele não possui plug-ins para todos os shells mencionados, então recomendo usar a abordagem de Zanchey.

informação relacionada