我想在空环境中运行程序(即没有设置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