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


15

我经常在以Unix为重点的常见问答网站上回答问题,在我的许多回答中,我都提供了使用bashShell的示例。但是,每次执行此操作时,我都必须手动完成创建干净环境的过程,以确保对每个步骤都进行了说明和记录。如何使该过程更简单?理想情况下,我希望键入一个命令并获得一个干净的环境,并在完成后删除该临时环境的所有痕迹。


Answers:


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

依次执行以下操作:

  • 创建一个临时目录(在干净的环境中用作我们的工作目录);
  • 创建一个临时文件(用作我们的bashrc文件);
  • 在rc文件中,添加以下行:
    • PS1提示设置为提示终止符,后跟一个空格,以防在我们希望在Q&A站点上获得输出副本时保持相关性;
    • 转到我们创建的临时目录。
  • 调用的新实例bash,该实例:
    • 最初有一个空环境,除了$HOME$TERMenv - ...);
    • 从我们之前创建的临时文件(--rcfile)中读取其rc文件。
  • bash退出后,删除我们创建的临时文件。

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


您尝试过使用script吗?
h3rrmiller 2012年

@ h3rrmiller-是的,尽管我倾向于不偏爱使用它。
克里斯·

2

chroot一种方式,使用VM是另一种方式。您可以在LV上建立chroot环境,对其进行快照,执行任何操作,然后恢复为快照状态。

或者-对VM(磁盘快照)执行相同操作,然后还原所有更改。

我通常使用全新安装的VM(使用VirtualBox和kickstart或通过PXE引导进行autoyast)来执行此操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.