经过一番研究后,我意识到cd
系统命令在我的系统上没有任何实现文件,特别是在/bin/
中。最近,一个类项目需要实现一个基本的shell程序,该程序可以使用该目录中的实现文件。
因此,我的程序无法更改目录,因为cd
不存在,并且必须是其他shell的内部实现。
话虽如此,您将如何以编程方式更改程序的当前工作目录?
答案 0 :(得分:7)
每个单独的进程都有一个“当前目录”的概念。创建新进程时,其当前目录是其父进程的当前目录。
shell只是另一个进程,与任何其他进程没有什么不同,除了这个特定进程等待您键入命令,然后它将类型化命令作为新进程执行。
现在应该很明显为什么没有任何实际的“cd”命令。说有一个。因此,您键入了“cd”命令,并且shell将“cd”命令作为新进程执行。
新进程会更改其当前目录,然后退出。
那么,你做了什么?绝对没有。 shell的当前目录没有改变。在这个假设的情况下,“cd”进程所做的就是改变它自己的当前目录,而不是别的。然后它终止了,一切都恢复到以前的状态。
这就是“cd”是内置命令的原因。此命令是shell直接执行的几个命令之一,此命令更改shell的当前目录。因此,从此shell开始的所有未来进程现在都将有一个新的当前目录。
更改进程当前目录的系统调用是chdir(2)。 C,Perl,Python和几乎所有其他编程语言都有一些叫做chdir的函数,或类似的函数,它执行系统调用,改变进程的当前目录。