Respondo con frecuencia en un popular sitio de preguntas y respuestas enfocado en Unix, y en muchas de mis respuestas proporciono ejemplos usando bash
cáscara. Sin embargo, cada vez que hago esto, tengo que pasar manualmente por el proceso de creación de 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? Idealmente, busco escribir un solo comando y obtener un entorno limpio, y eliminar todos los rastros de ese entorno temporal una vez que haya terminado.
Respuesta aceptada:
Yo personalmente uso el siguiente bash
funció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:
- Crear un directorio temporal (para usarlo como nuestro directorio de trabajo en el entorno limpio);
- Cree un archivo temporal (para usarlo como nuestro
bash
archivo rc); - En el archivo rc, agregue líneas que:
- Establecer el
PS1
mensaje al terminador de mensaje seguido de un espacio, lo que lo mantiene relevante en caso de que queramos tener una copia de nuestro resultado en el sitio de preguntas y respuestas; - Cambie al directorio temporal que creamos.
- Establecer el
- Invocar una nueva instancia de
bash
, que:- Inicialmente tiene un entorno vacío a excepción de
$HOME
y$TERM
(env - ...
); - Lee su archivo rc del archivo temporal que creamos anteriormente (
--rcfile
).
- Inicialmente tiene un entorno vacío a excepción de
- Una vez que haya salido de bash, 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 utilizar para realizar pruebas.