When you execute your code a shell prompt of the following form must appear: <username@system_name:curr_dir> E.g. <Name@UBUNTU:~>
- cd : To change the current directory
- pwd : Prints the current path
- echo : Prints
Implement ls [al] – (it should be able to handle
- ls
- ls -l
- ls -a
- ls -la
All other commands are treated as system commands like : emacs, vi and so on.
Foreground processes: For example, executing a "vi" command in the foreground implies that the
shell will wait for this process to complete and regain control when this process exits.
Background processes: Any command invoked with "&" is treated as background command.
This implies that the shell will spawn that process and doesn't wait for the process to exit. It will
keep taking user commands.
E.g:
<Name@UBUNTU:> ls &
This command when finished, will print its result to stdout.
<Name@UBUNTU:> emacs &
<Name@UBUNTU:~> ls -l -a
pinfo : prints the process related info of your shell program.
Apart from the user defined commands, all other commands are treated as system commands like:
emacs, vi and so on.
Foreground processes: For example, executing a "vi" command in the foreground implies that your shell will
wait for this process to complete and regain control when this process exits.
Background processes: Any command invoked with "&" is treated as background command.
E.g
<NAME@UBUNTU:> ls &
This command when finished, should print its result to stdout.
<NAME@UBUNTU:> emacs &
<NAME@UBUNTU:> ls -l -a
<NAME@UBUNTU:> echo hello
As and when emacs exits, your shell program should check the exit status of emacs and print it
on stderr
<NAME@UBUNTU:~>
emacs with pid 456 exited normally
<NAME@UBUNTU:~>
Output of running one (or more) commands must be redirected to a file. Similarly, a command might
be prompted to read input data from a file and asked to write output to another file.
E.g. Output redirection
<NAME@UBUNTU:> diff file1.txt file2.txt > output.txt
E.g. Input redirection
<NAME@UBUNTU:> sort < lines.txt
E.g. Input-Output redirection
<NAME@UBUNTU:~> sort < lines.txt > sortedlines.txt
Note: There is another clause for output direction '>>', and that must be implemented appropriately.
A pipe is identified by "|". One or more commands can be piped as the following examples show.
E.g. Two Commands
<NAME@UBUNTU:> more file.txt | wc
E.g. Three commands
<NAME@UBUNTU:> grep "new" temp.txt | cat - somefile.txt | wc
E.g.
<NAME@UBUNTU:> ls | grep *.txt > out.txt
<NAME@UBUNTU:> cat < in.txt | wc -l > lines.txt
- Make file : 'make'
- Run the shell file : './shell'
- To clean, run 'make clean'