How to implement your own cd command in your own s

2020-05-29 05:11发布

问题:

I am working in a mini project: "MY OWN COMMAND INTERPRETER (SHELL)", like the Bash shell or Sh shell. Till now it can execute every predefined commands like ls, ps, pwd, date. Except this I have implemented some other operations like Input Redirection(<), output redirection(>), PIPE (|) features. Along with this i have implemented my own user-commands like 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

But I am facing some difficulty in executing the cd command...

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

Someone told me to implement it by my own... Please help me in doing this. Thanks in advance.

回答1:

cd is not a program, it's a built-in command. The built-in command are directly built into the shell.

To implement cd, you basically need to

  1. Use chdir() to change the current directory
  2. Update some environment variables (like Klas Lindback said: OLDPWD and PWD)


回答2:

You may wish to have a look at the chdir function in unistd.h. This changes the working directory of the current process.



回答3:

In my project I have used chdir() to implement my cd command and it works. Every process has its own PWD(Present Working Directory). A shell is also a process and its default PWD is the PWD of its parent (bash shell where I have executed ./my_sh).