cómo ejecutar múltiples versiones de un shell en una sola máquina

cómo ejecutar múltiples versiones de un shell en una sola máquina

Para probar algunos scripts 1 en tantos entornos como sea posible, configuré varias máquinas virtuales con UNIX (o sistemas operativos similares a Unix):

  • linux
  • Solaris
  • OSX2
  • FreeBSD

Sin embargo, supongo que en muchos sentidos es más importante probar usando diferentes versiones de cada shell que planeo interesarme, que probar usando diferentes sistemas operativos.

Como prefiero que mis máquinas virtuales no se multipliquen en permutaciones aparentemente interminables, me gustaría instalar varias versiones de cada shell en cualquier máquina virtual determinada. Por ejemplo, si pruebo debajo [:bash,:zsh,:fish,:ksh,:csh,:tcsh,:sh,:dash,:ash], tengo 9 shells, y si asumes que estoy probando un promedio de 3 versiones de cada uno, entonces tengo más de 100 VM:

# operating_systems * shells * shell_versions
            4       *   9    *     3

¿Existe alguna forma práctica de instalar y utilizar varias versiones de un shell determinado en una sola máquina o máquina virtual? ¿Puedo (por ejemplo) instalar Bash 1, Bash 2, Bash 3 y Bash 4, todo en una máquina virtual Linux?

me di cuenta que

  1. algunas combinaciones son menos importantes y probablemente puedan ignorarse, y
  2. en última instancia, también me gustaría probar varias versiones de cada sistema operativo,

pero esas cosas están realmente separadas de esta pregunta, por lo que las dejo a un lado para considerar si esto es posible.

Entonces:¿Existe alguna forma práctica de instalar y utilizar varias versiones de un shell determinado en una sola máquina?


1 Estoy usando el término "guión" de manera vaga. Una de las primeras cosas que quiero probar es algo que se obtendrá de rclos archivos shell de cada uno, ya sea .zshrc, .bash_profileo lo que sea, por lo que no tendrá su propia línea shebang. De ahí el deseo de hacer que un fragmento de código funcione en múltiples shells. Otras cosas que serían útiles en todos los shells serían funciones y alias que me gustaría usar en diferentes máquinas, aunque no necesariamente todos tendrán mi shell favorito (Z Shell), pero podrían obligarme a usar Bash o Korn. También cualquier fragmento útil que quiera usar en scripts de shell en varias máquinas, incluso cuando no puedo poner mi shell favorito en la línea shebang.

2 Nota totalmente tangencial, incluida solo para no decir nada engañoso: en realidad no he configurado la máquina virtual OS X, ya que es bastante complicado, pero espero hacerlo y la incluí en la lista para que nadie diría "¡Oye! ¿¡Por qué no incluyes OS X !?"

Respuesta1

Si está satisfecho con compilar desde el código fuente, puede instalar cada versión en un prefijo separado y luego ajustar la ruta en sus scripts en consecuencia.

bash, fish, ksh, tcsh, zsh y dash admiten el --prefixargumento para configurar, por lo que puede descargar cada versión, ejecutar ./configure --prefix=/opt/SHELL-VERSION; make; make install. Luego, para usar cada versión, configure PATH para que esté /opt/SHELL-VERSION/binal frente.

csh es un poco diferente y requerirá más trabajo manual; Si está seguro de que lo desea, puede extraer las fuentes del árbol de fuentes de FreeBSD y editar el Makefile, pero la mayoría de la gente usa tcsh de todos modos.

No creo que haya una fuente canónica para Ash, pero probablemente tendrá una forma similar de hacer las cosas.

Respuesta2

Como dijo Zanchey, puedes instalar cada versión de shell en su propio prefijo. Si desea ponerlos en su RUTA, puede cambiarles el nombre y copiarlos a /usr/bin/. Por ejemplo:

$ 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

Respuesta3

asdfestá diseñado específicamente para "administrar múltiples versiones de tiempo de ejecución con una única herramienta CLI", ya sea que ese tiempo de ejecución sea un lenguaje, un shell o lo que sea. Tiene uncomplemento para Zsh, por lo que esto debería ser mucho más conveniente que implementar su propia solución.

Actualizar Si bien asdfpuede ser más conveniente, no tiene complementos para todos los shells mencionados, por lo que recomiendo usar el enfoque de Zanchey.

información relacionada