I\'m a newbie to process and thread management. My Shell should understand PATH
environment variable. It can be set and modified. It runs in two ways -interacti
Your main loop is:
fgets(3)
for a simple shell, readline(3)
for a fancy one)To parse the command, there are two common choices. Write a recursive descent parser or use yacc(1)
to generate one. It's a lot easier to bang out an initial parser using yacc
, but you can totally get stuck debugging it and it really wants to be context-free. I prefer recursive descent but just about everyone else in the world prefers using yacc. (Technically, bison
.) If the shell is really really simple, like a homework shell, yacc may be overkill.
To do the lexical analysis you can also roll your own or use flex.
You won't need to use any threads.
All the unix shells are open-source - so a good place to start may be to read the code.
If you're looking for a good starter article on the subject try Writing Your Own Shell from the Linux Gazette.
Another good starting point is to take a look at the source code of mini-shell just because its one of the smallest to get your head round.
Many of the Unix books that describe the main system calls also implement a shell to illustrate how and why you might use the various calls. Stevens and Rochkind are two such books:
W Richard Stevens, Stephen A Rago Advanced Programming in the Unix Environment, 3rd Edn
Marc J Rochkind Advanced Unix Programming, 2nd Edn