如何在bash中干净的环境中运行程序?

如何在bash中干净的环境中运行程序?

我想在空环境中运行程序(即没有设置envariables)。如何在 bash 中做到这一点?

答案1

您可以通过以下方式执行此操作env

env -i your_command

与下面的评论相反,这完全清除环境,但并不妨碍your_command设置新变量。特别是,运行 shell 会导致/etc/profile运行,并且 shell 也可能有一些内置设置。

您可以通过以下方式检查:

env -i env

即擦拭环境然后打印。输出将为空白。

答案2

bash可以拥有一个“干净”的环境

$ env -i bash --noprofile --norc
  • env -i命令执行在命令行上给它的命令,而不将旧 shell 环境的任何导出环境变量传输到执行程序的环境。

  • --noprofile选项停止bash读取系统范围或个人 shell 初始化脚本,否则登录 shell 会读取这些脚本。

  • --norc选项停止bash读取个人 shell 初始化脚本,否则交互式 shell 会读取这些脚本。

答案3

env -i somecommand在空环境中运行命令,如艾迈斯半导体已经提到过

许多程序依赖于一些重要的环境变量,因此您可能需要保留它们:

env -i HOME="$HOME" LC_CTYPE="${LC_ALL:-${LC_CTYPE:-$LANG}}" PATH="$PATH" USER="$USER" somecommand

或者,您可以登录到小型登录时环境。

ssh localhost somecommand

答案4

这里大多数答案的问题是env -i清除HOME,所以即使你bash -l在内部运行,它也不会读取你的.bash_profile等。如果你正在寻找的是一个外壳,就像你刚刚完成了一次新登录一样,那么你想要这个:

env -i HOME="$HOME" bash -l -c 'your_command'

例子:

$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123

相关内容