Rispondo spesso a un popolare sito di domande e risposte incentrato su Unix e in molte delle mie risposte fornisco esempi utilizzando bash
guscio. Tuttavia, ogni volta che lo faccio, devo eseguire manualmente il processo di creazione di un ambiente pulito per assicurarmi che ogni passaggio sia contabilizzato e documentato. Come posso rendere questo processo più semplice? Idealmente, sto cercando di digitare un singolo comando e ottenere un ambiente pulito e rimuovere tutte le tracce di quell'ambiente temporaneo al termine.
Risposta accettata:
Personalmente utilizzo il seguente bash
funzione per fare ciò:
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:
- Crea una directory temporanea (da utilizzare come directory di lavoro in un ambiente pulito);
- Crea un file temporaneo (da utilizzare come nostro
bash
rc); - Nel file rc, aggiungi le righe che:
- Imposta il
PS1
prompt al terminatore del 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.
- Imposta il
- Richiama una nuova istanza di
bash
, che:- Inizialmente ha un ambiente vuoto ad eccezione di
$HOME
e$TERM
(env - ...
); - Legge il suo file rc dal file temporaneo che abbiamo creato in precedenza (
--rcfile
).
- Inizialmente ha un ambiente vuoto ad eccezione di
- Una volta terminato bash, rimuovi i file temporanei che abbiamo creato.
Ovviamente questo non è del tutto infallibile, cioè puoi comunque accedere ad altre parti del tuo sistema. Ciò, tuttavia, fornisce un ambiente temporaneo pulito che puoi utilizzare per i test.