- correct command split by space
- handle empty commands
- add / ./ handling
- correct path parsing and argument parsing according to the
man execve
- add Ctrl-C + Ctrl-D handling
- parsing all paths
- trying all paths robustly
- proper handling for command not found
- include handling of
!
while parsing and also while checking exit status - use exit status of wait: The Unix convention is that a zero exit status represents success, and any non-zero exit status represents failure.
- implement your own
cd
in C - implement
cd
builtin in your own shell - print error messages according to errno
- for invalid path command ( e.g. ./a.sh ) give no such file or directory error
- add support for
;
,||
and&&
in commands - write a proper lexer and parser for commands
- add lexer tests
- add parser tests
- add tests for execution status
- after stage 1 refactor code to have a separate engine and cmd parsing
- add support for subshell commands
- add support for multiline commands
- pass stage 1 tests
- add support for pipe operators
- add support for redirect output operator
- add support for redirect input operator
- add support for redirect >> operator
- add support for redirect <> operator
- add support for redirect >& operator
- add support for redirect <& operator
- add support for fd in redirect operations
- add support for $() in shell
- add support for & parsing for job control
- add support for another execution mode (job control) in engine
- add color depending on exit status
- add last segment of current folder like my own zsh with some color
- Implement readline like https://github.com/kkawakam/rustyline
- Handle Ctrl+P input, maintain last command executed, and fill input with it
- builtin command execution successful handling
- builtin command execution error case handling and printing
- correct signal handling by referencing https://github.com/kkawakam/rustyline
- correct handling of "" and {} in commands like
grep "c"
orawk {print $9}
- correct handling of commands like "ls 2> err", for some reason wrong cmd exec in our shell is written on stdout itself
- correct subshell command mode entirely, understand it properly and implement again