How to implement your own cd command in your own shell

Sourabh Das picture Sourabh Das · Nov 14, 2014 · Viewed 10.3k times · Source

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.

Answer

nouney picture nouney · Nov 14, 2014

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)