我想制作一个简单的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
.