#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.