Často odpovídám na oblíbeném webu pro otázky a odpovědi zaměřeném na Unix a v mnoha svých odpovědích uvádím příklady pomocí bash
skořápka. Pokaždé, když to dělám, však musím ručně projít procesem vytváření čistého prostředí, abych se ujistil, že každý krok je započítán a zdokumentován. Jak mohu tento proces zjednodušit? V ideálním případě chci napsat jediný příkaz a získat čisté prostředí a poté, co skončím, nechat odstranit všechny stopy tohoto dočasného prostředí.
Přijatá odpověď:
Osobně používám následující bash
funkce k tomu:
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"
}
Dělá to v tomto pořadí:
- Vytvořte dočasný adresář (k použití jako náš pracovní adresář v čistém prostředí);
- Vytvořte dočasný soubor (pro použití jako
bash
rc soubor); - Do souboru rc přidejte řádky, které:
- Nastavte
PS1
výzva k ukončení výzvy následovaná mezerou, která ji udržuje relevantní v případě, že chceme mít kopii našeho výstupu na webu otázek a odpovědí; - Změňte se do dočasného adresáře, který jsme vytvořili.
- Nastavte
- Vyvolejte novou instanci
bash
, který:- Zpočátku má prázdné prostředí kromě
$HOME
a$TERM
(env - ...
); - Načte svůj rc soubor z dočasného souboru, který jsme vytvořili dříve (
--rcfile
).
- Zpočátku má prázdné prostředí kromě
- Jakmile bash skončí, odeberte dočasné soubory, které jsme vytvořili.
Zjevně to není zcela spolehlivé, to znamená, že stále máte přístup k jiným částem vašeho systému. To však poskytuje čisté dočasné prostředí, které můžete použít pro testování.