我在用chdir()
将目录更改为作为参数传递给该函数的值。
我明白当我使用运行我的C程序时gcc myCd.c
and ./a.out ..
这会将目录更改为 C 程序“内”的父目录(即为 a.out 进程生成一个子进程,并且目录的更改发生在该子进程内)。
我想要做的是,使用这个 C 程序更改终端上的目录。我尝试为此编写一个 shell 脚本,然后获取它并运行,这可行,但我想使用 C 来实现这一点。
你试图做的事情是无法完成的。这当前工作目录是每个进程的属性。
如果您运行的程序改变了它的cwd,它不会影响任何其他进程,除了它之后可能创建的任何子进程chdir()
.
更改终端工作目录的正确方法是使用cd
shell 代表您执行并保留在同一进程中的命令。那是,cd
是 shell 不执行的几个命令之一fork()
;这使得cd
命令按预期工作。
source
编译 shell 文件使其在 shell 进程中运行。但是,如果您要运行脚本而无需source
,您会发现存在与 C 程序完全相同的问题:shell 分叉创建一个进程供脚本运行,它运行然后退出,然后 shell 继续,但其 cwd 没有更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)