chdir()不影响环境变量PWD

时间:2010-09-04 11:28:44

标签: c linux chdir

当我使用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”

3 个答案:

答案 0 :(得分:6)

是的,如果你想改变环境变量,你必须明确地这样做。

它是在正常的事件运行中设置和更新PWD的shell,因此它只反映shell已知的当前目录的更改。

答案 1 :(得分:3)

“getenv”从程序开始的环境中获取PWD。等待当前工作目录的“PWD”是由shell维护的,并且由于您更改了从shell而不是shell启动的程序中的目录,因此PWD在环境中没有更改。

您可能还会注意到,当程序结束时,shell仍然位于您启动的目录中。 shell没有更改目录,因此PWD没有更改。

答案 2 :(得分:3)

chdir不会自动更新PWD环境变量,因此您必须使用setenv显式更新。但是,getcwd函数仍应自动报告更新后的值。