问题
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
- Use
chdir()
to change the current directory - Update some environment variables (like Klas Lindback said:
OLDPWD
andPWD
)
回答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).
来源:https://stackoverflow.com/questions/26928907/how-to-implement-your-own-cd-command-in-your-own-shell