web-dev-qa-db-ja.com

一時的に使用するためのクリーンなシェル環境を作成するにはどうすればよいですか?

私はUnixに焦点を当てた人気のあるQ&Aサイトで頻繁に回答しています。私の回答の多くでは、bashシェルを使用した例を示しています。ただし、これを行うたびに、クリーンな環境を作成するプロセスを手動で実行して、すべてのステップが説明され、文書化されていることを確認する必要があります。このプロセスをより簡単にするにはどうすればよいですか?理想的には、1つのコマンドを入力してクリーンな環境を取得し、完了後にその一時的な環境の痕跡をすべて削除することを検討しています。

15
anon

私は個人的に次のbash関数を使用してこれを行います。

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

順序は次のとおりです。

  • 一時ディレクトリを作成します(クリーンな環境で作業ディレクトリとして使用します)。
  • 一時ファイルを作成します(bash rcファイルとして使用します)。
  • Rcファイルに次の行を追加します:
    • PS1 PromptをPromptターミネーターの後にスペースを設定します。これにより、Q&Aサイトに出力のコピーが必要な場合に備えて関連性が保たれます。
    • 作成した一時ディレクトリに移動します。
  • bashの新しいインスタンスを呼び出します。これは:
    • $HOME$TERMenv - ...)を除いて、最初は空の環境があります。
    • 以前に作成した一時ファイル(--rcfile)からrcファイルを読み取ります。
  • Bashが終了したら、作成した一時ファイルを削除します。

明らかに、これは完全に確実なわけではありません。つまり、システムの他の部分にアクセスできます。ただし、これにより、テストに使用できるクリーンな一時環境が提供されます。

10
Chris Down

chrootは1つの方法で、VMは別の方法です。LV上にchroot環境を構築し、スナップショットを作成し、何でもしてから、スナップショットの状態に戻すことができます。 。

または-VM(disk-snapshot))で同じことを行い、後ですべての変更を元に戻します。

私は通常、新しくインストールしたVM(VirtualBoxとキックスタートまたはPXEブートでautoyastを使用)を使用してこれを行います。

2
Nils