Pessoalmente, uso a seguinte bash
função para fazer isso:
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"
}
Aqui está o que ele faz, em ordem:
- Crie um diretório temporário (para usar como nosso diretório de trabalho no ambiente limpo);
- Crie um arquivo temporário (para usar como nosso
bash
arquivo rc);
- No arquivo rc, adicione linhas que:
- Defina o
PS1
prompt para o terminador de prompt seguido de um espaço, que o mantém relevante caso desejemos ter uma cópia de nossa saída no site de perguntas e respostas;
- Mude para o diretório temporário que criamos.
- Invoque uma nova instância de
bash
, que:
- Inicialmente possui um ambiente vazio, exceto for
$HOME
e $TERM
( env - ...
);
- Lê seu arquivo rc do arquivo temporário que criamos anteriormente (
--rcfile
).
- Depois que o bash terminar, remova os arquivos temporários que criamos.
Obviamente, isso não é totalmente infalível, ou seja, você ainda pode acessar outras partes do seu sistema. Isso, no entanto, fornece um ambiente temporário limpo que você pode usar para testar.