3

我正在一个迷你项目中工作:“我自己的命令解释器(SHELL)”,比如 Bash shell 或 Sh shell。到目前为止,它可以执行所有预定义的命令,如 ls、ps、pwd、date。除此之外,我还实现了一些其他操作,例如输入重定向(<)、输出重定向(>)、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> 

有人告诉我自己实现它......请帮助我这样做。提前致谢。

4

3 回答 3

5

cd不是程序,而是内置命令。内置命令直接内置在 shell 中。

要实施cd,您基本上需要

  1. 用于chdir()更改当前目录
  2. 更新一些环境变量(如 Klas Lindback 所说:OLDPWDPWD
于 2014-11-14T11:32:09.353 回答
4

您可能希望查看chdir. unistd.h这将更改当前进程的工作目录。

于 2014-11-14T11:30:28.837 回答
0

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

于 2015-02-06T11:40:56.893 回答