日期:2014-05-16  浏览次数:20681 次

写了一个程序来根据名称打印环境变量的值;如果有两个输入参数则修改环境变量为第二个值;修改之后当时可以发现确实修改了,但是重新运行程序,发现没修改啊,
//这段是读取变量的路径
  var=argv[1];
  value=getenv(var);
  if(value)
  printf("Variable %s has value %s\n",var,value);
  else
  printf("Variable %s has no value \n",var);

//这段是修改路径,修改的路径就是第二个参数
  if(argc==3){
  char *string;
  string=malloc(strlen(argv[1])+strlen(argv[2])+2);
  value=argv[2];
  strcpy(string,var);
  strcat(string,"=");
  strcat(string,value);
  printf("Calling new putenv with %s \n",string);
  putenv(string);
//显示修改之后的路径 
 value=getenv(var);
  printf("New value of %s is %s \n" ,var ,value);
  }
  exit(0);
  }
  
修改之后我再重新运行下这个,发现他的路径没有修改啊

------解决方案--------------------
楼主的是C文件啊,编译成执行程序后,会作为独立的进程运行。
楼主改变的是这个程序自己的环境变量,
改变之后的环境变量,可以影响这个程序本身和这个程序的子进程的环境变量;
但是不会影响其他进程(包括你的登录shell进程)的环境变量。