Comment puis-je créer un environnement shell propre pour une utilisation temporaire?

15

Je réponds fréquemment sur un site de questions / réponses populaire axé sur Unix, et dans plusieurs de mes réponses, je fournis des exemples utilisant le bashshell. Cependant, chaque fois que je fais cela, je dois passer manuellement par le processus de création d'un environnement propre pour m'assurer que chaque étape est prise en compte et documentée. Comment puis-je rendre ce processus plus simple? Je cherche idéalement à taper une seule commande et à obtenir un environnement propre, et à supprimer toutes les traces de cet environnement temporaire après avoir terminé.

Gilles 'SO- arrête d'être méchant'
la source

Réponses:

10

J'utilise personnellement la bashfonction suivante pour ce faire:

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"
}

Voici ce qu'il fait, dans l'ordre:

  • Créez un répertoire temporaire (à utiliser comme répertoire de travail dans un environnement propre);
  • Créez un fichier temporaire (à utiliser comme bashfichier rc);
  • Dans le fichier rc, ajoutez des lignes qui:
    • Définissez l' PS1invite sur le terminateur d'invite suivi d'un espace, ce qui la maintient pertinente au cas où nous voudrions avoir une copie de notre sortie sur le site Q&R;
    • Accédez au répertoire temporaire que nous avons créé.
  • Appelez une nouvelle instance de bash, qui:
    • A initialement un environnement vide à l'exception de $HOMEet $TERM( env - ...);
    • Lit son fichier rc dans le fichier temporaire que nous avons créé précédemment ( --rcfile).
  • Une fois bash terminé, supprimez les fichiers temporaires que nous avons créés.

Évidemment, ce n'est pas totalement infaillible, c'est-à-dire que vous pouvez toujours accéder à d'autres parties de votre système. Cependant, cela fournit un environnement temporaire propre que vous pouvez utiliser pour les tests.

Chris Down
la source
as-tu essayé d'utiliser script?
h3rrmiller
@ h3rrmiller - Oui, même si j'ai tendance à ne pas l'utiliser par préférence.
Chris Down
2

chrootest une façon, l'utilisation d'une machine virtuelle en est une autre. Vous pouvez créer l'environnement chroot sur un LV, le prendre en photo, faire tout ce que vous voulez, puis revenir à l'état pris en photo.

Ou - faites de même avec la VM (instantané de disque) et annulez toutes les modifications par la suite.

Je le fais généralement avec une machine virtuelle fraîchement installée (en utilisant VirtualBox et kickstart ou autoyast avec PXE-boot).

Nils
la source