Day 1: What does a shell even do?
So I’m working on writing a shell in C a little bit. Before yesterday, I didn’t have a very clear idea of what writing a shell even meant. Here are some things that your shell has to do! I’m sure there are some Important Things missing.
- Parse what you type in to figure out which are the commands and which
are the arguments (
ls -la LICENSE
) - expand
ls *
intols file1 file2 file3 ...
- Pipes! If you write
ls | grep blah
, it needs to send the output fromls
intogrep
. And redirection too. - Signal handling! If you press
Ctrl+C
, it needs to send that signal to whatever process you’re running. Or something. I don’t really understand this yet. - Process management! Lets you background and foreground jobs. (
Ctrl+z
andfg
andbg
) - Shell scripting! (for loops and things)
And a thing the shell doesn’t have to do:
- Figure out which command to execute using the
$PATH
environment variable.exec
does that, apparently.
I think I’m going to work on implementing pipes & redirection & signal handling.