#valgrind --suppressions=readline.supp --leak-check=full --track-fds=yes --show-leak-kinds=all ./minishell
#valgrind --track-origins=yes --suppressions=../readline.supp --leak-check=full --show-leak-kinds=all --track-fds=yes ./minishell
#export a=1 b=2 f="file1 file2" s=" " n="" ls=" ls -l " e="echo '$0'" e=e c=c h=h o=o PWD="PIKACHU"
#sigint(ctrl c) and sigquit(ctrl ) - ignore sigquit, sigint use readline function #read, tokenize, ast nodes, parse, expansion, execute
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
minishell
βββ inc/
β βββ minishell.h
β βββ token.h
β βββ parse.h
β βββ exec.h
β βββ pipe.h
β βββ redirect.h
β βββ builtins.h
β βββ heredoc.h
β βββ sig_control.h
β βββ error.h
β βββ env.h
β βββ expansion.h
βββ libft/
βββ token/
βββ parse/
βββ exec/
βββ pipe/
βββ redirect/
βββ builtins/
βββ heredoc/
βββ signal/
βββ error/
βββ env/
βββ expansion/
βββ main.c
βββ Makefile
- Fix SIGINT (Ctrl+C) exit status to return 130
- Review and fix signal handling in heredoc context
- ctrl-D (EOF) prints exit
- ctrl-D (EOF) Invalid read of size 8 at 0x10B8A5: freetree (treehelper.c:25)
- Fix word splitting for variables
# Issue example: export name="ninja turtle" echo $name # Should output: ninja turtle echo "$name" # Should preserve original spacing
- Preserve spaces in quoted variable expansions
- "" and '' are tokens when sandwish by spaces, or end of input
- Implement proper handling for non-executable files
- Invalid cmd calls exit (and prints exit)
- Add validation for
.and..directory execution attempts
- Implement heredoc expansion
- Implement heredoc delimiter with ''
- Implement heredoc delimiter with no expansion
- Fix pipe closing issues in redirect operations:
# Test cases: > test >> test
- Implement correct behavior for multiple heredocs
- Fix heredoc behavior in pipe sequences
- Handle multiple redirections:
# Test case: cat < makefile < asd
- Ensure pipe sequence continues with invalid commands:
# Should continue execution despite 'blah' failing sleep 5 | blah | ls
- Implement cleanup() functions for all components
- Add/check error messages for failure cases if (input != NULL && ft_strcmp(input, "$?") == 1) { printf("%d\n", (*shell)->exit_status); add_history(input); free(input); continue; }
# Test cases
ctrl+C during command execution
ctrl+C during heredoc
ctrl+C in empty prompt# Test cases
export var="a b c"
echo $var
echo "$var"
echo '$var'# Test cases
cmd > file1 > file2
cmd >> file1 >> file2
cat < file1 < file2# Test cases
cmd1 | cmd2 | invalid_cmd | cmd3
cmd1 | cmd2 > file | cmd3- Keep this README updated as tasks are completed
- Mark completed tasks with [x]
- Add new edge cases as discovered
- Test before marking tasks as complete
- Update behavior changes
- Add anything missing to this doc.