【问题标题】:Remove environmental variable programmatically以编程方式删除环境变量
【发布时间】:2010-07-08 15:23:33
【问题描述】:

我需要为一些 C++ 代码编写一个单元测试来检查环境变量的存在。我使用 MSVS 2008 和 gtest 作为我的框架。我使用 putenv 添加环境变量,我使用 getevn 检查环境变量,但我不知道如何删除它,以免其他测试看到它。我意识到这可能很容易,但我在互联网上找不到答案。谢谢

【问题讨论】:

    标签: c++ visual-studio-2008 unit-testing environment-variables


    【解决方案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 出现不一致的结果...
      猜你喜欢
      • 2012-09-14
      • 2011-01-08
      • 2012-10-16
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      相关资源
      最近更新 更多