chdir(<directory>) 在退出到 shell 后不改变目录

ene*_*dil 9 process c cd-command

我想制作一个简单的C程序来更改我的项目目录。其内容如下:

#include <unistd.h>
int main()
{
    chdir("/home/enedil/projects/algo");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用以下命令编译它(pro.c是它的文件名):

gcc pro.c -o /usr/local/bin/pro
Run Code Online (Sandbox Code Playgroud)

没有错误或警告。但是,当我运行它,它并不会改变目录。为什么?

Kem*_*niu 16

您的程序完全按照您的要求执行:它将自己的工作目录更改为/home/enedil/projects/algo. 但是一旦它退出,shell 的工作目录就会恢复。

我想你想要实现的是改变父进程的工作目录,即shell,而不是求助于简单的cd. 有一种方法,但正如其作者所说:不要这样做。

  • Nitpick,但 shell 的工作目录没有恢复,因为它从未改变过。shell 只是一个进程,就像程序一样。每个程序都有自己的工作目录。 (9认同)
  • @帕特里克,真的。从概念上讲,更准确的是 **您的** 工作目录已恢复,因为您的进程已“恢复”(在前台处于活动状态)。 (2认同)

vin*_*c17 6

当前工作目录是进程的本地目录。所以,你想要的是不可能的。