c++ - chdir() 返回 0,但在 chdir() 调用后的下一行中调试显示目录​​没有改变

标签 c++ bash shell chdir

<分区>

我的代码:

    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 实现不正确,但是我正在这段代码片段中进行调试,应该没有办法 chdir() 稍后会丢失。

最佳答案

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

要知道当前目录,请使用 getcwd()

关于c++ - chdir() 返回 0,但在 chdir() 调用后的下一行中调试显示目录​​没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35596839/

相关文章:

c++ - 在 C++ 中使用运算符删除的段错误

windows - 比较缺少哪些文件夹

json - 如何在 echo 中添加引号?

c++ - 编译 libpng 并将其与 netbeans 和 mingw 一起使用

c++ - 使用 _bstr_t 在函数中传递类型为 BSTR* 的参数

打开新终端时bash别名消失

用于取消当前(以及所有后续)脚本的 Bash 退出选项

shell - npx:shell-auto-fallback 参数已被删除

linux - 如何在docker中监听端口?

c++ - 派生类可以访问作为内部类的友元的父类的 protected 内部类的私有(private)方法吗?