Come posso creare un ambiente shell pulito per un utilizzo temporaneo?


15

Sono un frequente risponditore su un popolare sito di domande e risposte focalizzato su Unix e in molte delle mie risposte fornisco esempi usando la bashshell. Tuttavia, ogni volta che lo faccio, devo passare manualmente attraverso il processo di creazione di un ambiente pulito per assicurarmi che ogni passaggio sia giustificato e documentato. Come posso rendere questo processo più semplice? Sto idealmente cercando di digitare un singolo comando e ottenere un ambiente pulito, e dopo aver fatto rimuovere tutte le tracce di quell'ambiente temporaneo.


Risposte:


10

Personalmente uso la seguente bashfunzione per fare questo:

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"
}

Ecco cosa fa, in ordine:

  • Creare una directory temporanea (da utilizzare come directory di lavoro in un ambiente pulito);
  • Crea un file temporaneo (da usare come nostro bashfile rc);
  • Nel file rc, aggiungi le righe che:
    • Impostare il PS1 prompt sul terminatore di prompt seguito da uno spazio, che lo mantiene rilevante nel caso in cui desideriamo avere una copia del nostro output sul sito di domande e risposte;
    • Passa alla directory temporanea che abbiamo creato.
  • Richiamare una nuova istanza di bash, che:
    • Inizialmente ha un ambiente vuoto ad eccezione di $HOMEe $TERM( env - ...);
    • Legge il suo file rc dal file temporaneo creato in precedenza ( --rcfile).
  • Una volta che bash è uscito, rimuovere i file temporanei che abbiamo creato.

Ovviamente questo non è totalmente infallibile, cioè puoi comunque accedere ad altre parti del tuo sistema. Ciò, tuttavia, fornisce un ambiente temporaneo pulito che è possibile utilizzare per i test.


hai provato a usare script?
h3rrmiller,

@ h3rrmiller - Sì, anche se tendo a non usarlo per preferenza.
Chris Down,

2

chrootè un modo, usare una macchina virtuale è un altro. Potresti costruire l'ambiente chroot su un LV, fare un'istantanea, fare qualsiasi cosa e poi tornare allo stato istantaneo.

Oppure: fare lo stesso con la VM (istantanea del disco) e ripristinare tutte le modifiche in seguito.

Di solito lo faccio con una VM appena installata (usando VirtualBox e kickstart o autoyast con PXE-boot).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.