我试图用c编译程序中的unsetenv函数删除Linux环境变量。我运行c程序,unsetenv成功了。但是,当我在shell中运行env命令时,TURN_ON_TESTING仍然存在。为什么不能抹去?
我的c程序是

#include <stdlib.h>


void main()
{
char *name = "TURN_ON_TESTING";
if(unsetenv(name) == -1)
    printf("Error");





}

谢谢

最佳答案

哦,但它会被抹去。不幸的不是你想要的。
当您运行二进制bash时,它正在创建其“子进程”,并将所有变量复制到其中。让我们考虑以下代码:

// ununsetter.cpp

#include <stdlib.h>
#include <iostream>

int main()
{
char *name = "TURN_ON_TESTING";
char *val = "NEW_VALUE";

std::cout << "OLD VALUE: " << getenv(name)<<std::endl;

if(setenv(name, val, 10) == -1)
  return -1;

std::cout << "NEW VALUE: " << getenv(name)<<std::endl;

 return 0;

}

现在让我们进行测试:
export TURN_ON_TESTING=OLD_VALUE;
./ununsetter
echo $TURN_ON_TESTING;

如您所见,开启测试的状态如下:
OLD_VALUE  ---> before running app
OLD_VALUE  ---> while running app, but before setting it to NEW_VALUE
NEW_VALUE  ---> while running app, after setting it to NEW_VALUE
OLD_VALUE  ---> after app is finished

问题是,这些值与第一个和最后一个值不是同一个“对象”。

关于linux - 在Linux中使用unsetenv,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48675209/

10-14 14:27
查看更多