6

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

更改目录 /boot

目录已更改。当前工作目录是“/home/user”“/boot”

4

3 回答 3

7

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

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

于 2010-09-04T11:33:41.130 回答
3

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

您可能还会注意到,当您的程序结束时,shell 仍然在您开始的目录中。shell没有改变目录,所以PWD没有改变。

于 2010-09-04T11:44:05.627 回答
3

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

于 2010-09-04T11:47:10.353 回答