使用chdir()从终端更改目录

使用chdir()从终端更改目录,c,shell,chdir,C,Shell,Chdir,我使用chdir将directory更改为作为此函数的参数传递的值 我知道当我使用gcc myCd.C和./a.out运行我的C程序时。。这会将C程序中的目录更改为父目录,即为a.out进程生成一个子进程,并且目录的更改发生在该子进程中 我想做的是,用这个C程序更改终端的目录。我试着为同一个脚本编写一个shell脚本,然后将其寻源并运行,这是可行的,但我想用C实现这一点。您试图做的事情无法完成。当前工作目录是每个进程的属性 如果您运行一个更改其cwd的程序,它不会影响任何其他进程,除了它在chd

我使用chdir将directory更改为作为此函数的参数传递的值

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


我想做的是,用这个C程序更改终端的目录。我试着为同一个脚本编写一个shell脚本,然后将其寻源并运行,这是可行的,但我想用C实现这一点。

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

如果您运行一个更改其cwd的程序,它不会影响任何其他进程,除了它在chdir之后可能创建的任何子进程

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


源代码化shell文件使其在shell进程中运行。但是,如果您在没有源代码的情况下运行脚本,您会发现与C程序存在完全相同的问题:shell分叉以创建一个进程供脚本运行,它运行然后退出,然后shell继续运行,但其cwd没有更改。

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

这需要包含unistd.h头文件

if( 0 != chdir( "pathToNewDirectory" ) )
{ // then chdir failed
    perror( "chdir failed" );
   // handle error
}

你能解释一下脚本的来源吗?在终端输入“SourceScriptName”非常相似。scriptname“注意:并非所有脚本语言都提供“源代码”。通常可以在csh和bash@Anton.P,我的意思是,通过以下两种方式之一运行脚本:1。myScript.sh2。源代码myScript.sh,但正如@user3629249所指出的,并非所有脚本语言都可以使用它。因此,我们必须想出另一条出路!是的,这与我编写C程序的方式完全相同。正如本文引用的评论和答案中提到的,C程序将作为一个单独的进程生成,并且不会更改终端上父进程的目录