Ich antworte häufig auf einer beliebten Q&A-Site mit Unix-Schwerpunkt, und in vielen meiner Antworten gebe ich Beispiele mit der bash
Hülse. Allerdings muss ich jedes Mal, wenn ich dies tue, den Prozess der Erstellung einer sauberen Umgebung manuell durchlaufen, um sicherzustellen, dass jeder Schritt berücksichtigt und dokumentiert wird. Wie kann ich diesen Prozess einfacher gestalten? Idealerweise möchte ich einen einzigen Befehl eingeben und eine saubere Umgebung erhalten und alle Spuren dieser temporären Umgebung entfernen lassen, nachdem ich fertig bin.
Akzeptierte Antwort:
Ich persönlich verwende die folgende bash
Funktion dazu:
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"
}
Hier ist, was es tut, in der Reihenfolge:
- Erstellen Sie ein temporäres Verzeichnis (um es als unser Arbeitsverzeichnis in der sauberen Umgebung zu verwenden);
- Erstellen Sie eine temporäre Datei (zur Verwendung als unsere
bash
rc-Datei); - Fügen Sie in der rc-Datei Zeilen hinzu, die:
- Stellen Sie den
PS1
ein prompt zum Prompt-Terminator, gefolgt von einem Leerzeichen, wodurch es relevant bleibt, falls wir eine Kopie unserer Ausgabe auf der Q&A-Site haben möchten; - Wechseln Sie in das von uns erstellte temporäre Verzeichnis.
- Stellen Sie den
- Rufen Sie eine neue Instanz von
bash
auf , die:- Hat anfänglich eine leere Umgebung außer
$HOME
und$TERM
(env - ...
); - Liest seine RC-Datei aus der temporären Datei, die wir zuvor erstellt haben (
--rcfile
).
- Hat anfänglich eine leere Umgebung außer
- Sobald bash beendet ist, entfernen Sie die temporären Dateien, die wir erstellt haben.
Offensichtlich ist dies nicht absolut narrensicher, das heißt, Sie können immer noch auf andere Teile Ihres Systems zugreifen. Dies stellt jedoch eine saubere temporäre Umgebung bereit, die Sie zum Testen verwenden können.