gpt4 book ai didi

linux - 在 Linux 中使用 unsetenv

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:42 26 4
gpt4 key购买 nike

我试图在 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;

如您所见,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com