以编程方式删除环境变量
Posted
技术标签:
【中文标题】以编程方式删除环境变量【英文标题】:Remove environmental variable programmatically 【发布时间】:2010-07-08 15:23:33 【问题描述】:我需要为一些 C++ 代码编写一个单元测试来检查环境变量的存在。我使用 MSVS 2008 和 gtest 作为我的框架。我使用 putenv 添加环境变量,我使用 getevn 检查环境变量,但我不知道如何删除它,以免其他测试看到它。我意识到这可能很容易,但我在互联网上找不到答案。谢谢
【问题讨论】:
【参考方案1】:再次调用putenv
并指定"SOME_VAR="
作为参数将删除环境变量SOME_VAR
。顺便说一句,Microsoft 建议使用 _putenv
,因为 putenv
已弃用。
【讨论】:
请注意,至少在 Solaris 上,手册页中没有提及此功能。 他正在使用 MSVS 2008。暗示他正在使用 Windows。在 Linux 上,我会使用 setenv 和 unsetenv。不知道 Solaris 是否有这些。【参考方案2】:您总是可以 fork/exec 一个子进程来执行 putenv
/getenv
测试,然后当它终止时,周围没有任何杂散环境。
【讨论】:
我想到了,但正在寻找更清洁的解决方案【参考方案3】:如何将环境变量设置为空字符串?
在 cmd.exe 中,这可行:
set SOMEVAR=something
echo %SOMEVAR%
set SOMEVAR=
echo %SOMEVAR%
最后一个显示已被删除的地方。
【讨论】:
【参考方案4】:您可以使用unsetenv
函数。
如果vc2008缺少这个功能,可以直接使用getenv_s
访问环境,手动移除入口,模拟unsetenv
。
【讨论】:
在不使用 POSIX 子系统的情况下在 Windows 上是否真的可用? Google 出现不一致的结果...以上是关于以编程方式删除环境变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jenkins/Hudson 中以编程方式设置环境变量?