代码如下:
@test-accd100051:~/xx$ cat a.c
#include <stdio.h>
#include <stdlib.h>
#define NAMEA "testBoardAddrFile"
int main(int argc, char* argv)
{
char * p = getenv(NAMEA);
if(NULL == p)
{
printf("error null.\n");
return -1;
}
printf("%s\n", p);
printf("aa\n");
return 0;
}
想在代码中getenv "testBoardAddrFile". 执行步骤:
export testBoardAddrFile=/mnt/workspacexxx
gcc a.c -o a
sudo ./a
test@test-accd100051:~/xx$ sudo ./a
error null.
不用sudo:
test@test-accd100051:~/xx$ ./a
/mnt/workspacexxxx
aa
这样是可以的.
那应该是sudo有问题.
解决方法: 加上-E :
test@test-accd100051:~/xx$ sudo -E ./a
/mnt/workspacexxxx
aa
解决了.
代码示例中,程序通过getenv函数尝试获取环境变量testBoardAddrFile。当使用sudo运行时,环境变量未被继承导致错误。解决方法是在sudo命令后添加-E选项,以保留用户的环境变量。不使用sudo或者使用sudo-E运行程序则能正确获取并显示环境变量的值。
527

被折叠的 条评论
为什么被折叠?



