当我使用chdir()更改当前工作目录时,为什么getenv(“PWD”)不提供当前工作目录?我是否还需要setenv(“PWD”,newDir,1)?
void intChangeDir(char *newDir)
{
if( chdir(newDir)==0 )
{
printf("Directory changed. The present working directory is \"%s\" \"%s\"\n",getenv("PWD"),getcwd(NULL,0));
}
else
{
printf("Error changing dir %s\n",strerror(errno));
}
}
输出:(可执行文件的位置是/ home / user)
changedir / boot
目录已更改。目前的工作目录是“/ home / user”“/ boot”
答案 0 :(得分:6)
是的,如果你想改变环境变量,你必须明确地这样做。
它是在正常的事件运行中设置和更新PWD
的shell,因此它只反映shell已知的当前目录的更改。
答案 1 :(得分:3)
“getenv”从程序开始的环境中获取PWD。等待当前工作目录的“PWD”是由shell维护的,并且由于您更改了从shell而不是shell启动的程序中的目录,因此PWD
在环境中没有更改。
您可能还会注意到,当程序结束时,shell仍然位于您启动的目录中。 shell没有更改目录,因此PWD没有更改。
答案 2 :(得分:3)
chdir
不会自动更新PWD环境变量,因此您必须使用setenv
显式更新。但是,getcwd
函数仍应自动报告更新后的值。