_=/Users/chuhlig/Desktop/merged_minishell/minishell/./minishell TERM=xterm-256color USER_ZDOTDIR=/Users/chuhlig ZDOTDIR=/Users/chuhlig VSCODE_INJECTION=1 VSCODE_GIT_IPC_HANDLE=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/vscode-git-e47956ed09.sock VSCODE_GIT_ASKPASS_MAIN=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js VSCODE_GIT_ASKPASS_EXTRA_ARGS= VSCODE_GIT_ASKPASS_NODE=/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) GIT_ASKPASS=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh COLORTERM=truecolor LANG=en_US.UTF-8 TERM_PROGRAM_VERSION=1.95.3 TERM_PROGRAM=vscode OLDPWD=/Users/chuhlig/Desktop/merged_minishell PWD=/Users/chuhlig/Desktop/merged_minishell/minishell SHLVL=1 ORIGINAL_XDG_CURRENT_DESKTOP=undefined XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ __CF_USER_TEXT_ENCODING=0x1928E:0x0:0x2 SHELL=/bin/zsh HOME=/Users/chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.ECcBYJZkxn/Listeners LOGNAME=chuhlig PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Users/chuhlig/goinfre/.brew/bin MallocNanoZone=0 USER=chuhlig _=/Users/chuhlig/Desktop/merged_minishell/minishell/./minishell TERM=xterm-256color USER_ZDOTDIR=/Users/chuhlig ZDOTDIR=/Users/chuhlig VSCODE_INJECTION=1 VSCODE_GIT_IPC_HANDLE=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/vscode-git-e47956ed09.sock VSCODE_GIT_ASKPASS_MAIN=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js VSCODE_GIT_ASKPASS_EXTRA_ARGS= VSCODE_GIT_ASKPASS_NODE=/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) GIT_ASKPASS=/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh COLORTERM=truecolor LANG=en_US.UTF-8 TERM_PROGRAM_VERSION=1.95.3 TERM_PROGRAM=vscode OLDPWD=/Users/chuhlig/Desktop/merged_minishell PWD=/Users/chuhlig/Desktop/merged_minishell/minishell SHLVL=1 ORIGINAL_XDG_CURRENT_DESKTOP=undefined XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ __CF_USER_TEXT_ENCODING=0x1928E:0x0:0x2 SHELL=/bin/zsh HOME=/Users/chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.ECcBYJZkxn/Listeners LOGNAME=chuhlig PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Users/chuhlig/goinfre/.brew/bin MallocNanoZone=0 USER=chuhlig //some test case about built in command bash-3.2$ ls Applications Music Desktop Pictures Documents francinette Downloads getting-started Library goinfre Movies setup_docker_environment bash-3.2$ pwd /Users/chuhlig bash-3.2$ ls | cd / | ls Applications Music Desktop Pictures Documents francinette Downloads getting-started Library goinfre Movies setup_docker_environment bash-3.2$ pwd /Users/chuhlig bash-3.2$ env TERM_PROGRAM=iTerm.app TERM=xterm-256color SHELL=/bin/zsh TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ TERM_PROGRAM_VERSION=3.5.10 TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 USER=chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners __CF_USER_TEXT_ENCODING=0x0:0:0 TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities PWD=/Users/chuhlig LANG=en_US.UTF-8 ITERM_PROFILE=Default XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 SHLVL=2 HOME=/Users/chuhlig COLORFGBG=7;0 LC_TERMINAL_VERSION=3.5.10 ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 LOGNAME=chuhlig LC_TERMINAL=iTerm2 COLORTERM=truecolor _=/usr/bin/env bash-3.2$ export test=test | unset USER bash-3.2$ env TERM_PROGRAM=iTerm.app TERM=xterm-256color SHELL=/bin/zsh TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ TERM_PROGRAM_VERSION=3.5.10 TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 USER=chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners __CF_USER_TEXT_ENCODING=0x0:0:0 TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities PWD=/Users/chuhlig LANG=en_US.UTF-8 ITERM_PROFILE=Default XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 SHLVL=2 HOME=/Users/chuhlig COLORFGBG=7;0 LC_TERMINAL_VERSION=3.5.10 ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 LOGNAME=chuhlig LC_TERMINAL=iTerm2 COLORTERM=truecolor _=/usr/bin/env bash-3.2$ env | grep test bash-3.2$ ls | cd / | env TERM_PROGRAM=iTerm.app TERM=xterm-256color SHELL=/bin/zsh TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ TERM_PROGRAM_VERSION=3.5.10 TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 USER=chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners __CF_USER_TEXT_ENCODING=0x0:0:0 TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities PWD=/Users/chuhlig LANG=en_US.UTF-8 ITERM_PROFILE=Default XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 SHLVL=2 HOME=/Users/chuhlig COLORFGBG=7;0 LC_TERMINAL_VERSION=3.5.10 ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 LOGNAME=chuhlig LC_TERMINAL=iTerm2 COLORTERM=truecolor _=/usr/bin/env bash-3.2$ ls | cd / | env TERM_PROGRAM=iTerm.app TERM=xterm-256color SHELL=/bin/zsh TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ TERM_PROGRAM_VERSION=3.5.10 TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 USER=chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners __CF_USER_TEXT_ENCODING=0x0:0:0 TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities PWD=/Users/chuhlig LANG=en_US.UTF-8 ITERM_PROFILE=Default XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 SHLVL=2 HOME=/Users/chuhlig COLORFGBG=7;0 LC_TERMINAL_VERSION=3.5.10 ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 LOGNAME=chuhlig LC_TERMINAL=iTerm2 COLORTERM=truecolor _=/usr/bin/env bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ ls | cd / | env TERM_PROGRAM=iTerm.app TERM=xterm-256color SHELL=/bin/zsh TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ TERM_PROGRAM_VERSION=3.5.10 TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 USER=chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners __CF_USER_TEXT_ENCODING=0x0:0:0 TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities PWD=/Users/chuhlig LANG=en_US.UTF-8 ITERM_PROFILE=Default XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 SHLVL=2 HOME=/Users/chuhlig COLORFGBG=7;0 LC_TERMINAL_VERSION=3.5.10 ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 LOGNAME=chuhlig LC_TERMINAL=iTerm2 COLORTERM=truecolor _=/usr/bin/env bash-3.2$ ls | cd / | env | cd / bash-3.2$ pwd /Users/chuhlig bash-3.2$ ls | cd / | env | cd ~ bash-3.2$ ls | cd / | env | cd - bash: cd: OLDPWD not set bash-3.2$ ls | cd - | env bash: cd: OLDPWD not set TERM_PROGRAM=iTerm.app TERM=xterm-256color SHELL=/bin/zsh TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ TERM_PROGRAM_VERSION=3.5.10 TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 USER=chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners __CF_USER_TEXT_ENCODING=0x0:0:0 TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities PWD=/Users/chuhlig LANG=en_US.UTF-8 ITERM_PROFILE=Default XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 SHLVL=2 HOME=/Users/chuhlig COLORFGBG=7;0 LC_TERMINAL_VERSION=3.5.10 ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 LOGNAME=chuhlig LC_TERMINAL=iTerm2 COLORTERM=truecolor _=/usr/bin/env bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ bash-3.2$ ls | cd - | env bash: cd: OLDPWD not set TERM_PROGRAM=iTerm.app TERM=xterm-256color SHELL=/bin/zsh TMPDIR=/var/folders/zz/zyxvpxvq6csfxvn_n000ckjr0034mf/T/ TERM_PROGRAM_VERSION=3.5.10 TERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 USER=chuhlig SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.BLODixwZXQ/Listeners __CF_USER_TEXT_ENCODING=0x0:0:0 TERM_FEATURES=T3LrMSc7UUw9Ts3BFGsSyHNoSxF TERMINFO_DIRS=/Applications/iTerm.app/Contents/Resources/terminfo:/usr/share/terminfo PATH=/Users/chuhlig/goinfre/.brew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/iTerm.app/Contents/Resources/utilities PWD=/Users/chuhlig LANG=en_US.UTF-8 ITERM_PROFILE=Default XPC_FLAGS=0x0 XPC_SERVICE_NAME=0 SHLVL=2 HOME=/Users/chuhlig COLORFGBG=7;0 LC_TERMINAL_VERSION=3.5.10 ITERM_SESSION_ID=w0t0p0:EC167FE5-607B-4E5F-A816-E8EF7FA09EC7 LOGNAME=chuhlig LC_TERMINAL=iTerm2 COLORTERM=truecolor _=/usr/bin/env bash-3.2$ ////////////////////////////////////////////////////////////////// static int handle_redirections(t_redirection *redirs) { if (redirs[0].type == INPUT_LIMITER) { int pipe_fds[2]; if (pipe(pipe_fds) == -1) { perror("pipe"); return -1; } write(pipe_fds[1], redirs[0].specifier, strlen(redirs[0].specifier)); close(pipe_fds[1]); dup2(pipe_fds[0], STDIN_FILENO); close(pipe_fds[0]); } else if (redirs[0].type == INPUT_FILE) { int fd = open(redirs[0].specifier, O_RDONLY); if (fd == -1) { perror(redirs[0].specifier); return -1; } dup2(fd, STDIN_FILENO); close(fd); } if (redirs[1].type == OUTPUT_OVERRIDE) { int fd = open(redirs[1].specifier, O_WRONLY | O_CREAT | O_TRUNC, 0644); if (fd == -1) { perror(redirs[1].specifier); return -1; } dup2(fd, STDOUT_FILENO); close(fd); } else if (redirs[1].type == OUTPUT_APPEND) { int fd = open(redirs[1].specifier, O_WRONLY | O_CREAT | O_APPEND, 0644); if (fd == -1) { perror(redirs[1].specifier); return -1; } dup2(fd, STDOUT_FILENO); close(fd); } return 0; } static int eval_rec(t_node *node, t_env **env, int in_fd) { pid_t pid; int p[2], result; if (node->type == PIPE_NODE) { pipe(p); pid = fork(); if (pid == 0) { close(p[0]); dup2(in_fd, STDIN_FILENO); dup2(p[1], STDOUT_FILENO); result = eval_rec(node->content.pipe.left, env, in_fd); exit(result); } else { close(p[1]); dup2(p[0], STDIN_FILENO); result = eval_rec(node->content.pipe.right, env, p[0]); } } else if (node->type == CMD_NODE) { result = execute_cmd(&node->content.cmd, env); } else { panic("UNREACHABLE"); result = EXIT_FAILURE; } return result; } int eval(t_node *node, t_env **env) { return eval_rec(node, env, STDIN_FILENO); } int execute_cmd(t_cmd *cmd, t_env **env) { if (handle_redirections(cmd->redirs) == -1) { return EXIT_FAILURE; } if (is_builtin(cmd->args[0])) { return execute_builtin(cmd->args, env); } else { pid_t pid = fork(); if (pid == 0) { char *cmd_path = get_cmd_path(cmd->args[0], *env); if (!cmd_path) { fprintf(stderr, "%s: command not found\n", cmd->args[0]); exit(EXIT_FAILURE); } execve(cmd_path, cmd->args, env_to_strlst(*env)); perror("execve"); exit(EXIT_FAILURE); } else { int status; waitpid(pid, &status, 0); return WEXITSTATUS(status); } } } have to update env list/tokenlist order or update the existing code to handle the order of the tokenlist/env list echo "Hello" | grep H this works also more to do on heredoc and for the for part of domenic removing the " ' frome the string beside t_redirection *collect_redirs(t_token **tokens) { t_redirection *result; t_token *cur; cur = *tokens; result = malloc(sizeof(t_redirection) * 2); if (result == NULL) return (free_tokens(*tokens), NULL); set_redir(&result[0], 0, NULL); set_redir(&result[1], 0, NULL); while (cur != NULL && cur->next != NULL) { if (cur->type == REDIR_TOKEN && cur->next->type == STRING_TOKEN) collect_and_check_redir(result, &cur); else if (cur->type == REDIR_TOKEN) return (free(result), NULL); else cur = cur->next; } if (cur && cur->type == REDIR_TOKEN) return (free(result), NULL); return (result); } static void collect_and_check_redir(t_redirection *result, t_token **cur) { char *heredoc_data; t_token *next_token; heredoc_data = NULL; if ((*cur)->content.redir_type == INPUT_LIMITER) { // Handle Here Document (<<) heredoc_data = read_heredoc((*cur)->next->content.string); if (!heredoc_data) { perror("Heredoc allocation failed"); return ; } set_redir(&result[0], INPUT_LIMITER, heredoc_data); } else if ((*cur)->content.redir_type == INPUT_FILE) { // Handle Input File (<) set_redir(&result[0], INPUT_FILE, ft_strdup((*cur)->next->content.string)); } else if ((*cur)->content.redir_type == OUTPUT_OVERRIDE) { // Handle Output File Overwrite (>) set_redir(&result[1], OUTPUT_OVERRIDE, ft_strdup((*cur)->next->content.string)); } else if ((*cur)->content.redir_type == OUTPUT_APPEND) { // Handle Output File Append (>>) set_redir(&result[1], OUTPUT_APPEND, ft_strdup((*cur)->next->content.string)); } else { // Handle unexpected cases printf("Unknown redirection type encountered\n"); } // Advance the token pointer to skip the redirection token and its argument next_token = (*cur)->next; free_token_and_connect(*cur); // Free the current redirection token if (next_token) { *cur = next_token->next; // Move to the next token after the argument } else { *cur = NULL; // No more tokens } } collect args apassen x alsso fur arg x muss in rpl parse x und in parse cmd collect args and x format args seems to work later test x Test 1: ✅ echo hello world Test 2: ✅ echo "hello world" Test 3: ✅ echo 'hello world' Test 4: ✅ echo hello'world' Test 5: ✅ echo hello""world Test 6: ✅ echo '' Test 7: ✅ echo "$PWD" Test 8: ✅ echo '$PWD' Test 9: ❌ echo "aspas ->'" string formater checken mini output = (aspas ->") bash output = (aspas ->') Test 10: ❌ echo "aspas -> ' " mini output = (aspas -> ") bash output = (aspas -> ' ) Test 11: ✅ echo 'aspas ->"' Test 12: ✅ echo 'aspas -> " ' Test 13: ❌ echo "> >> < * ? [ ] | ; [ ] || && ( ) & # $ <<" mini output = (> >> < README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards ? [ ] | ; [ ] || && ( ) & # ) bash output = (> >> < README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards ? [ ] | ; [ ] || && ( ) & # $ <<) Test 14: ✅ echo '> >> < * ? [ ] | ; [ ] || && ( ) & # $ <<' Test 15: ❌ echo "exit_code ->$? user ->$USER home -> $HOME" mini output = (exit_code ->/Users/dkaiser) bash output = (exit_code ->0 user ->dkaiser home -> /Users/dkaiser) Test 16: ✅ echo 'exit_code ->$? user ->$USER home -> $HOME' string formater checken Test 17: ❌ echo "$" mini output = (../minishell) bash output = ($) Test 18: ✅ echo '$' Test 19: ❌ echo $ mini output = (../minishell) bash output = ($) Test 20: ❌ echo $? mini output = () bash output = (0) Test 21: ❌ echo $?HELLO mini output = () bash output = (0HELLO) Test 22: ✅ pwd Test 23: ✅ pwd oi Test 24: ✅ export hello Test 25: ✅ export HELLO=123 Test 26: ❌ export A- mini exit code = 0 bash exit code = 1 mini error = () bash error = ( not a valid identifier) Test 27: ✅ export HELLO=123 A Test 28: ✅ export HELLO="123 A-" Test 29: ✅ export hello world Test 30: ❌ export HELLO-=123 mini exit code = 0 bash exit code = 1 mini error = () bash error = ( not a valid identifier) Test 31: ❌ export = mini exit code = 0 bash exit code = 1 mini error = () bash error = ( not a valid identifier) Test 32: ❌ export 123 mini exit code = 0 bash exit code = 1 mini error = () bash error = ( not a valid identifier) Test 33: ✅ unset Test 34: ✅ unset HELLO Test 35: ✅ unset HELLO1 HELLO2 Test 36: ✅ unset HOME Test 37: ✅ unset PATH Test 38: ✅ unset SHELL Test 39: ❌ cd $PWD mini exit code = 139 bash exit code = 0 Test 40: ❌ cd $PWD hi mini exit code = 139 bash exit code = 0 Test 41: ❌ cd 123123 mini exit code = 139 bash exit code = 1 mini error = () bash error = ( No such file or directory) Test 42: ❌ exit 123 mini exit code = 0 bash exit code = 123 Test 43: ❌ exit 298 mini exit code = 0 bash exit code = 42 Test 44: ❌ exit +100 mini exit code = 0 bash exit code = 100 Test 45: ❌ exit "+100" mini exit code = 0 bash exit code = 100 Test 46: ❌ exit +"100" mini exit code = 0 bash exit code = 100 Test 47: ❌ exit -100 mini exit code = 0 bash exit code = 156 Test 48: ❌ exit "-100" mini exit code = 0 bash exit code = 156 Test 49: ❌ exit -"100" mini exit code = 0 bash exit code = 156 Test 50: ❌ exit hello mini exit code = 0 bash exit code = 255 mini error = () bash error = ( numeric argument required) Test 51: ❌ exit 42 world mini exit code = 0 bash exit code = 1 mini error = () bash error = ( too many arguments) Test 52: ❌ mini exit code = bash exit code = 0 ———————————— pipes Test 53: ✅ env | sort | grep -v SHLVL | grep -v ^_ Test 54: ✅ cat ./test_files/infile_big | grep oi Test 55: ✅ cat minishell.h | grep ");"$ Test 56: ✅ export GHOST=123 | env | grep GHOST ———————————— redirects Test 57: ✅ grep hi <./test_files/infile Test 58: ✅ grep hi "./outfiles/outfile01 Test 82: ✅ ls > ./outfiles/outfile01 Test 83: ✅ echo hi > ./outfiles/outfile01 bye Test 84: ❌ ls >./outfiles/outfile01 >./outfiles/outfile02 Only in ./bash_outfiles: outfile01 mini outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards bash outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards Test 85: ❌ ls >./outfiles/outfile01 >./test_files/invalid_permission Only in ./bash_outfiles: outfile01 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: Test 86: ❌ ls >"./outfiles/outfile with spaces" Only in ./bash_outfiles: outfile with spaces mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards mini exit code = 1 bash exit code = 0 mini error = ( No such file or directory) bash error = () Test 87: ❌ ls >"./outfiles/outfile""1""2""3""4""5" Only in ./bash_outfiles: outfile12345 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards mini exit code = 1 bash exit code = 0 mini error = ( No such file or directory) bash error = () Test 88: ❌ ls >"./outfiles/outfile01" >./test_files/invalid_permission >"./outfiles/outfile02" Only in ./bash_outfiles: outfile01 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: mini error = ( No such file or directory) bash error = ( Permission denied) Test 89: ✅ ls >./test_files/invalid_permission >"./outfiles/outfile01" >./test_files/invalid_permission Test 90: ❌ cat <"./test_files/infile" >"./outfiles/outfile01" Only in ./bash_outfiles: outfile01 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: hi hello world 42 mini exit code = 1 bash exit code = 0 mini error = ( No such file or directory) bash error = () Test 91: ✅ echo hi >./outfiles/outfile01 | echo bye Test 92: ❌ echo hi >./outfiles/outfile01 >./outfiles/outfile02 | echo bye Only in ./bash_outfiles: outfile01 mini outfiles: hi bash outfiles: hi Test 93: ✅ echo hi | echo >./outfiles/outfile01 bye Test 94: ❌ echo hi | echo bye >./outfiles/outfile01 >./outfiles/outfile02 Only in ./bash_outfiles: outfile01 mini outfiles: bye bash outfiles: bye Test 95: ✅ echo hi >./outfiles/outfile01 | echo bye >./outfiles/outfile02 Test 96: ❌ echo hi >./outfiles/outfile01 >./test_files/invalid_permission | echo bye Only in ./bash_outfiles: outfile01 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: Test 97: ✅ echo hi >./test_files/invalid_permission | echo bye Test 98: ❌ echo hi >./test_files/invalid_permission >./outfiles/outfile01 | echo bye Only in ./mini_outfiles: outfile01 mini outfiles: hi bash outfiles: cat: ./bash_outfiles/*: No such file or directory mini error = () bash error = ( Permission denied) Test 99: ✅ echo hi | echo bye >./test_files/invalid_permission Test 100: ❌ echo hi | >./outfiles/outfile01 echo bye >./test_files/invalid_permission Only in ./bash_outfiles: outfile01 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: mini exit code = 139 bash exit code = 1 mini error = () bash error = ( Permission denied) Test 101: ❌ echo hi | echo bye >./test_files/invalid_permission >./outfiles/outfile01 Only in ./mini_outfiles: outfile01 mini outfiles: bye bash outfiles: cat: ./bash_outfiles/*: No such file or directory mini exit code = 0 bash exit code = 1 mini error = () bash error = ( Permission denied) Test 102: ✅⚠️ cat <"./test_files/infile" >./test_files/invalid_permission mini error = ( No such file or directory) bash error = ( Permission denied) Test 103: ✅⚠️ cat >./test_files/invalid_permission <"./test_files/infile" mini error = ( No such file or directory) bash error = ( Permission denied) Test 104: ✅ cat ./outfiles/outfile01 Test 105: ❌ cat >./outfiles/outfile01 ./test_files/invalid_permission Test 107: ✅⚠️ cat >./test_files/invalid_permission ./outfiles/outfile01 ./test_files/invalid_permission Only in ./bash_outfiles: outfile01 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: Test 109: ✅ ls >>./outfiles/outfile01 Test 110: ✅ ls >> ./outfiles/outfile01 Test 111: ✅ ls >>./outfiles/outfile01 >./outfiles/outfile01 Test 112: ✅ ls >./outfiles/outfile01 >>./outfiles/outfile01 Test 113: ❌ ls >./outfiles/outfile01 >>./outfiles/outfile01 >./outfiles/outfile02 Only in ./bash_outfiles: outfile01 mini outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards bash outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards Test 114: ❌ ls >>./outfiles/outfile01 >>./outfiles/outfile02 Only in ./bash_outfiles: outfile01 mini outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards bash outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards Test 115: ✅ ls >>./test_files/invalid_permission Test 116: ❌ ls >>./test_files/invalid_permission >>./outfiles/outfile01 Only in ./mini_outfiles: outfile01 mini outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards bash outfiles: cat: ./bash_outfiles/*: No such file or directory mini exit code = 0 bash exit code = 1 mini error = () bash error = ( Permission denied) Test 117: ❌ ls >>./outfiles/outfile01 >>./test_files/invalid_permission Only in ./bash_outfiles: outfile01 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: Test 118: ❌ ls >./outfiles/outfile01 >>./test_files/invalid_permission >>./outfiles/outfile02 Only in ./bash_outfiles: outfile01 Only in ./mini_outfiles: outfile02 mini outfiles: README.md bash.supp bash_outfiles bonus bonus_bonus builtins extras local.supp loop.out manual_tests mini_outfiles os_specific outfiles pipes redirects syntax test_files tester wildcards bash outfiles: mini exit code = 0 bash exit code = 1 mini error = () bash error = ( Permission denied) Test 119: ✅ ls >./test_files/invalid_permission >>./outfiles/outfile02 Test 120: ✅⚠️ ls >>./test_files/invalid_permission >>./outfiles/outfile02 >./outfiles/outfile01 | echo bye Test 122: ❌ echo hi >>./outfiles/outfile01 >>./outfiles/outfile02 | echo bye Only in ./bash_outfiles: outfile01 mini outfiles: hi bash outfiles: hi Test 123: ✅ echo hi | echo >>./outfiles/outfile01 bye Test 124: ❌ echo hi | echo bye >>./outfiles/outfile01 >>./outfiles/outfile02 Only in ./bash_outfiles: outfile01 mini outfiles: bye bash outfiles: bye Test 125: ✅ echo hi >>./outfiles/outfile01 | echo bye >>./outfiles/outfile02 Test 126: ✅ echo hi >>./test_files/invalid_permission | echo bye Test 127: ❌ echo hi >>./test_files/invalid_permission >./outfiles/outfile01 | echo bye Only in ./mini_outfiles: outfile01 mini outfiles: hi bash outfiles: cat: ./bash_outfiles/*: No such file or directory mini error = () bash error = ( Permission denied) Test 128: ✅ echo hi | echo bye >>./test_files/invalid_permission Test 129: ❌ echo hi | echo >>./outfiles/outfile01 bye >./test_files/invalid_permission Only in ./bash_outfiles: outfile01 mini outfiles: cat: ./mini_outfiles/*: No such file or directory bash outfiles: Test 130: ✅ cat ./outfiles/outfile Test 131: ✅ cat