How to implement your own cd command in your own shell

10,796

Solution 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)

Solution 2

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

Share:
10,796
Sourabh Das
Author by

Sourabh Das

Updated on June 28, 2022

Comments

  • Sourabh Das
    Sourabh Das almost 2 years

    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.

  • mafso
    mafso over 9 years
    The check for existence is unnecessary, chdir fails in that case. (And it's useless, too, the directory could exist while stating and be deleted before the chdir call.)
  • mafso
    mafso over 9 years
    I suggest emphasizing that cd cannot be implemented as a program. Similar questions came up a few times during the last weeks and often people aren't aware that a process cannot change its parent's environment.