Como posso criar um ambiente de shell limpo para uso temporário?

15

Eu sou um respondente frequente em um site popular de perguntas e respostas focado no Unix, e em muitas das minhas respostas eu forneço exemplos usando o bashshell. No entanto, cada vez que faço isso, preciso passar manualmente pelo processo de criação de um ambiente limpo para garantir que todas as etapas sejam contabilizadas e documentadas. Como posso tornar esse processo mais direto? O ideal é procurar digitar um único comando e obter um ambiente limpo e remover todos os vestígios desse ambiente temporário após a conclusão.

Gilles 'SO- parar de ser mau'
fonte

Respostas:

10

Pessoalmente, uso a seguinte bashfunçã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 basharquivo rc);
  • No arquivo rc, adicione linhas que:
    • Defina o PS1prompt 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 $HOMEe $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.

Chris Down
fonte
você já tentou usar script?
H3rrmiller
@ h3rrmiller - Sim, embora eu costumo não usá-lo por preferência.
21720 Chris Down
2

chrooté uma maneira, usar uma VM é outra. Você pode criar o ambiente chroot em um LV, fazer uma captura instantânea, fazer o que for e depois reverter para o estado de captura instantânea.

Ou - faça o mesmo com a VM (instantâneo do disco) e reverta todas as alterações posteriormente.

Eu costumo fazer isso com uma VM instalada recentemente (usando o VirtualBox e o kickstart ou o autoyast com o PXE-boot).

Nils
fonte