chdir() 退出 shell 后不更改目录

chdir() 退出 shell 后不更改目录

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

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

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

gcc pro.c -o /usr/local/bin/pro

没有错误或警告。但是当我运行它时,它确实不是更改目录。为什么?

答案1

您的程序完全按照您的指示执行:它更改了工作目录本身/home/enedil/projects/algo。但一旦退出,贝壳的工作目录已恢复。

我想您想要实现的是更改父进程(即 shell)的工作目录,而不是诉诸简单的cd.有一个方法,但正如其作者所说:不要这样做。

答案2

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

答案3

要对 shell 执行此操作,请使用source命令(别名为.)。它将在当前 shell 的上下文中运行应用程序,而不是创建新的 shell 上下文。这也是设置环境变量的方法。如果您注意到/etc/rc.d或中的所有启动脚本/etc/init.d,您将看到许多脚本被其他脚本包含在该命令中

. /etc/init.d/rcvars

.会导致脚本的/etc/init.d/rcvars任何更改都保留在当前环境中。

答案4

您还可以使用CDPATH环境变量。正如中所解释的man bash

   CDPATH The search path for the cd command.  This is  a  colon-separated
          list  of  directories  in  which the shell looks for destination
          directories specified by the cd  command.   A  sample  value  is
          ".:~:/usr".

因此,例如,您可以将此行添加到您的~/.profile

CDPATH=~/projects

您现在可以cd projects从任何目录运行并移动到~/projects.

相关内容