如何创建一个干净的 shell 环境以供临时使用?

15 bash environment-variables profile

我是一个以 Unix 为重点的流行问答网站的常客,在我的许多答案中,我提供了使用bashshell 的示例。但是,每次执行此操作时,我都必须手动完成创建干净环境的过程,以确保每一步都得到考虑和记录。我怎样才能使这个过程更简单?理想情况下,我希望输入一个命令并获得一个干净的环境,并在完成后删除该临时环境的所有痕迹。

Chr*_*own 10

我个人使用以下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"
}
Run Code Online (Sandbox Code Playgroud)

这是它的作用,按顺序:

  • 创建一个临时目录(用作我们在干净环境中的工作目录);
  • 创建一个临时文件(用作我们的bashrc 文件);
  • 在 rc 文件中,添加以下行:
    • PS1提示设置为提示终止符,后跟一个空格,如果我们想在问答站点上获得输出的副本,则可以保持相关性;
    • 切换到我们创建的临时目录。
  • 调用 的新实例bash,其中:
    • 除了$HOMEand $TERM( env - ...)之外,最初有一个空的环境;
    • 从我们之前创建的临时文件 ( --rcfile) 中读取其 rc 文件。
  • bash 退出后,删除我们创建的临时文件。

显然这并非完全万无一失,也就是说,您仍然可以访问系统的其他部分。但是,这确实提供了一个干净的临时环境,您可以将其用于测试。