chdir()返回0,但在chdir()调用后的下一行调试显示该目录未更改

时间:2016-02-24 08:24:46

标签: c++ bash shell chdir

mycode的:

    int ushExCd(Cmd cmd){ // BuiltIn shell command implementation
        char * home = "HOME";
        int returnVal = 1;
        if(cmd->nargs > 1){ // target directory is specified in args[1]
            returnVal = chdir(cmd->args[1]);
        }else{ // target directory is not specified, use "HOME" instead
            returnVal = chdir(getenv(home));
        }
        if(-1 == returnVal){
            perror("cd");
        }
        return 1;
    }

使用llvm调试器在分配后立即检查returnVal,显示其值为0(尽管初始化为1),但在p (char*)getenv("PWD")之后立即在调试器中执行chdir()系统调用显示目录未更改。

我正在使用Xcode,但之后我尝试使用bash shell,使用gcc编译器的tcsh没有用。

更有趣的是,同一块代码在另一个人实现的shell上成功运行,这可能表明shell实现不正确,但是我正在调试这个代码片段中,并且应该没有办法{ {1}}在以后的某个时间点迷路了。

1 个答案:

答案 0 :(得分:1)

我认为getenv("PWD")会在程序启动时为您提供当前目录。

要了解当前目录,请使用getcwd()