我正在一个小型项目中工作:“我自己的命令解释器(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
,你基本上需要
chdir()
更改当前目录 OLDPWD
和PWD
) 你可能希望看看unistd.h
中的chdir
函数。 这改变了当前进程的工作目录。
在我的项目中,我用chdir()来实现我的cd命令,它工作。 每个过程都有自己的PWD(现在工作目录)。 一个shell也是一个进程,它的默认PWD是其父(我已经执行了./my_sh的bash shell)的PWD。