如何在自己的shell中实现自己的cd命令

我正在一个小型项目中工作:“我自己的命令解释器(SHELL)”,就像Bash shell或Sh shell一样。 到目前为止,它可以执行每个预定义的命令,如ls,ps,pwd,date。 除此之外,我还实现了其他一些操作,如inputredirect(<),输出redirect(>),PIPE(|)特性。 随着这个我已经实现了我自己的用户命令,如pid,ppid,quit,hist。

vvdnlt208@vvdnlt208-Vostro-3446:~/project/Vector/sourabh/unix/proj2$ ./my_sh <1 SOURABH> ls a cd.c execute.o inredir.c main.o multiexec.o my_sh sh.c sigign.c test.c addhist.c dir header.h inredir.o Makefile mypipe.c outredir.c showhist.c sigign.o tetest.c addhist.o execute.c inredir main.c multiexec.c mypipe.o outredir.o showhist.o test2.c <2 SOURABH> ps PID TTY TIME CMD 6120 pts/10 00:00:01 bash 6510 pts/10 00:00:00 grep 6512 pts/10 00:00:00 grep 6514 pts/10 00:00:00 grep 6516 pts/10 00:00:00 grep 7772 pts/10 00:00:00 my_sh 7774 pts/10 00:00:00 ps <3 SOURABH> pwd /home/vvdnlt208/project/Vector/sourabh/unix/proj2 <4 SOURABH> date Fri Nov 14 16:44:24 IST 2014 <5 SOURABH> <6 SOURABH> <7 SOURABH> <8 SOURABH> hist 1 ls 2 ps 3 pwd 4 date 8 hist <9 SOURABH> ls >a.txt <10 SOURABH> pid 7772 <11 SOURABH> ppid 

但是我在执行cd命令时遇到一些困难…

 <12 SOURABH> cd cd: No such file or directory <13 SOURABH> cd dir cd: No such file or directory <14 SOURABH> 

有人告诉我要自己实施…请帮助我这样做。 提前致谢。

cd不是一个程序,它是一个内置的命令。 内置命令直接内置在shell中。

要实现cd ,你基本上需要

  1. 使用chdir()更改当前目录
  2. 更新一些环境变量(如Klas Lindback说: OLDPWDPWD

你可能希望看看unistd.h中的chdir函数。 这改变了当前进程的工作目录。

在我的项目中,我用chdir()来实现我的cd命令,它工作。 每个过程都有自己的PWD(现在工作目录)。 一个shell也是一个进程,它的默认PWD是其父(我已经执行了./my_sh的bash shell)的PWD。