¿Cómo puedo crear un entorno de shell limpio para uso temporal?

15

Soy un respondedor frecuente en un sitio popular de preguntas y respuestas centrado en Unix, y en muchas de mis respuestas proporciono ejemplos usando el bashshell. Sin embargo, cada vez que hago esto, tengo que pasar manualmente por el proceso de crear un entorno limpio para asegurarme de que cada paso se tenga en cuenta y se documente. ¿Cómo puedo hacer que este proceso sea más sencillo? Lo ideal es que escriba un solo comando y obtenga un entorno limpio, y que elimine todos los rastros de ese entorno temporal una vez que haya terminado.

Gilles 'SO- deja de ser malvado'
fuente

Respuestas:

10

Yo personalmente uso la siguiente bashfunción para hacer esto:

so() {
    local tmpdir="$(mktemp -d)"
    local tmprc="$(mktemp)"
    cat > "$tmprc" << EOF
PS1='\\$ '
cd "$tmpdir"
EOF
    env - HOME="$HOME" TERM="$TERM" bash --rcfile "$tmprc"
    rm -rf "$tmpdir" "$tmprc"
}

Esto es lo que hace, en orden:

  • Cree un directorio temporal (para usar como nuestro directorio de trabajo en el entorno limpio);
  • Cree un archivo temporal (para usar como nuestro basharchivo rc);
  • En el archivo rc, agregue líneas que:
    • Establezca el PS1aviso en el terminador del aviso seguido de un espacio, que lo mantiene relevante en caso de que deseemos tener una copia de nuestra salida en el sitio de Preguntas y Respuestas;
    • Cambie al directorio temporal que creamos.
  • Invocar una nueva instancia de bash, que:
    • Inicialmente tiene un entorno vacío excepto por $HOMEy $TERM( env - ...);
    • Lee su archivo rc del archivo temporal que creamos anteriormente ( --rcfile).
  • Una vez que bash haya salido, elimine los archivos temporales que creamos.

Obviamente, esto no es totalmente infalible, es decir, aún puede acceder a otras partes de su sistema. Sin embargo, esto proporciona un entorno temporal limpio que puede usar para las pruebas.

Chris Down
fuente
has intentado usar script?
h3rrmiller
@ h3rrmiller: Sí, aunque tiendo a no usarlo por preferencia.
Chris Down el
2

chrootes una forma, usar una VM es otra. Puede construir el entorno chroot en un LV, capturarlo, hacer lo que sea y luego volver al estado de captura.

O bien, haga lo mismo con la VM (instantánea del disco) y revierta todos los cambios después.

Normalmente hago esto con una VM recién instalada (usando VirtualBox y kickstart o autoyast con PXE-boot).

Nils
fuente