How to implement your own cd command in your own shell
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
- Use
chdir()
to change the current directory - Update some environment variables (like Klas Lindback said:
OLDPWD
andPWD
)
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.
Sourabh Das
Updated on June 28, 2022Comments
-
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 over 9 yearsThe check for existence is unnecessary,
chdir
fails in that case. (And it's useless, too, the directory could exist whilestat
ing and be deleted before thechdir
call.) -
mafso over 9 yearsI 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.