2

我正在使用chdir()将目录更改为作为参数传递给此函数的值。

我知道,当我使用运行我的 C 程序时gcc myCd.c./a.out ..这会将目录更改为 C 程序“内”的父目录(即为 a.out 进程生成一个子进程,并且目录更改发生在该子进程内) .

我想要做的是,使用这个 C 程序在终端更改目录。我尝试为此编写一个 shell 脚本,然后采购它并运行它,但我想使用 C 来实现这一点。

4

2 回答 2

3

你试图做的事情无法完成。当前工作目录是每个进程的属性。

如果您运行更改其cwd的程序,它不会影响任何其他进程,除了它可能在chdir().

更改终端工作目录的正确方法是使用cdshell 代表您执行并保持在同一进程中的命令。也就是说,cd是 shell 没有的几个命令之一fork();这使得cd命令按预期工作。

source编译一个 shell 文件使它在 shell 的进程中运行。但是,如果您要在没有 的情况下运行脚本source,您会发现与使用 C 程序的问题完全相同:shell 派生出一个进程以供脚本运行,它运行然后退出,然后是 shell继续,但没有改变其 cwd。

于 2015-01-11T04:07:06.797 回答
1

这是在 C 中更改当前工作目录的方法

这需要包含unistd.h头文件

if( 0 != chdir( "pathToNewDirectory" ) )
{ // then chdir failed
    perror( "chdir failed" );
   // handle error
}
于 2015-01-11T11:04:55.153 回答