在干净的环境中运行脚本

时间:2019-04-10 09:28:51

标签: bash

假设我有一个脚本install.sh。 我想在此脚本的开头放置一条命令,该命令将为我清理环境,仅保留父外壳程序的$ PATH和$ HOME。

我了解env -i,但是它需要第二个脚本来执行“ env -i install.sh” 。我想要一个可以直接运行的install.sh脚本(“ sh install.sh”或“ ./install.sh”)。

2 个答案:

答案 0 :(得分:3)

您可以re-exec the script from within it

-webkit-animation:slideshow 21s infinite;

animation:slideshow 21s infinite;

[ -z "$CLEANED" ] && exec env -i CLEANED=1 "PATH=$PATH" "HOME=$HOME" bash "$0" "$@" unset CLEANED 是标记变量,用于告诉您的脚本环境已清除。

答案 1 :(得分:1)

执行此操作的一种方法是使用compgen -v给出变量名列表,然后依次取消设置每个变量名:

for i in $(compgen -v)
do
    case "$i" in
      HOME|PATH)
        ;;
      *)
        unset "$i"
        ;;
    esac
done
unset i

请注意,有些Bash变量无法设置:

  • BASHOPTS
  • BASH_ARGC
  • BASH_ARGV
  • BASH_LINENO
  • BASH_SOURCE
  • BASH_VERSINFO
  • EUID
  • PIPESTATUS
  • PPID
  • SHELLOPTS
  • UID
  • _