How to implement your own cd command in your own s

2020-05-29 04:50发布

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.

标签: c linux shell cd pwd
3条回答
三岁会撩人
2楼-- · 2020-05-29 05:30

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

查看更多
神经病院院长
3楼-- · 2020-05-29 05:34

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)
查看更多
啃猪蹄的小仙女
4楼-- · 2020-05-29 05:39

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

查看更多
登录 后发表回答