Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Path resolution

You probably found that it was a pain to test your shell in the previous part because you had to type the full path of every program. Luckily, every program (including your shell program) has access to a set of environment variables, which is structured as a hashtable of string keys to string values. One of these environment variables is the PATH variable. You can print the PATH variable of your development environment.

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:...

When bash or any other shell executes a program like wc, it looks for a program called wc in each directory listed in the PATH environment variable and runs the first one that it finds. The directories in PATH are separated with a colon. You may find the function strtok_r to be useful for parsing the PATH string.

Modify your shell so that it uses the PATH variable from the environment to resolve program names. Typing in the full pathname of the executable should still be supported. Do not use execvp since the autograder looks for execvp, and you won’t receive a grade if that word is found. Use execv instead and implement your own PATH resolution.