mirror of
https://codeberg.org/la-chouette/minishell.git
synced 2025-12-06 07:28:09 +01:00
minishell: only parse simple commands
This commit is contained in:
parent
f07a80c762
commit
d8bc528c5a
4 changed files with 25 additions and 211 deletions
193
test.sh
193
test.sh
|
|
@ -116,197 +116,8 @@ when_run <<EOF "simple command is parsed"
|
|||
echo hello
|
||||
EOF
|
||||
expecting <<EOF
|
||||
╰─ t_cmdgroup
|
||||
├─ t_cmdlist
|
||||
│ ├─ num_cmds = 1
|
||||
│ ╰─ cmd[0]
|
||||
│ ├─ t_cmdlist_item
|
||||
│ │ ╰─ t_pipeline
|
||||
│ │ ├─ num_cmd = 1
|
||||
│ │ ╰─ cmd[0]
|
||||
│ │ ╰─ t_simple_cmd
|
||||
│ │ ├─ words = [echo][hello]
|
||||
│ │ ╰─ (no redirections)
|
||||
│ ╰─ t_operator = END
|
||||
╰─ (no redirections)
|
||||
EOF
|
||||
|
||||
when_run <<EOF "single redirection is parsed"
|
||||
echo hello>outfile
|
||||
EOF
|
||||
expecting <<EOF
|
||||
╰─ t_cmdgroup
|
||||
├─ t_cmdlist
|
||||
│ ├─ num_cmds = 1
|
||||
│ ╰─ cmd[0]
|
||||
│ ├─ t_cmdlist_item
|
||||
│ │ ╰─ t_pipeline
|
||||
│ │ ├─ num_cmd = 1
|
||||
│ │ ╰─ cmd[0]
|
||||
│ │ ╰─ t_simple_cmd
|
||||
│ │ ├─ words = [echo][hello]
|
||||
│ │ ╰─ t_redir_list
|
||||
│ │ ╰─ redirection[0]
|
||||
│ │ ╰─ t_redirection
|
||||
│ │ ├─ t_redir_type = REDIR_OUTPUT
|
||||
│ │ ╰─ marker = [outfile]
|
||||
│ ╰─ t_operator = END
|
||||
╰─ (no redirections)
|
||||
EOF
|
||||
|
||||
when_run <<EOF "redirections are parsed"
|
||||
echo hello < in hi > out
|
||||
EOF
|
||||
expecting <<EOF
|
||||
╰─ t_cmdgroup
|
||||
├─ t_cmdlist
|
||||
│ ├─ num_cmds = 1
|
||||
│ ╰─ cmd[0]
|
||||
│ ├─ t_cmdlist_item
|
||||
│ │ ╰─ t_pipeline
|
||||
│ │ ├─ num_cmd = 1
|
||||
│ │ ╰─ cmd[0]
|
||||
│ │ ╰─ t_simple_cmd
|
||||
│ │ ├─ words = [echo][hello][hi]
|
||||
│ │ ╰─ t_redir_list
|
||||
│ │ ├─ redirection[0]
|
||||
│ │ │ ╰─ t_redirection
|
||||
│ │ │ ├─ t_redir_type = REDIR_INPUT
|
||||
│ │ │ ╰─ marker = [in]
|
||||
│ │ ╰─ redirection[1]
|
||||
│ │ ╰─ t_redirection
|
||||
│ │ ├─ t_redir_type = REDIR_OUTPUT
|
||||
│ │ ╰─ marker = [out]
|
||||
│ ╰─ t_operator = END
|
||||
╰─ (no redirections)
|
||||
EOF
|
||||
|
||||
when_run <<EOF "multiple redirections are parsed"
|
||||
echo << HERE_DOC hello>outfile there < infile < infile2 >> append
|
||||
EOF
|
||||
expecting <<EOF
|
||||
╰─ t_cmdgroup
|
||||
├─ t_cmdlist
|
||||
│ ├─ num_cmds = 1
|
||||
│ ╰─ cmd[0]
|
||||
│ ├─ t_cmdlist_item
|
||||
│ │ ╰─ t_pipeline
|
||||
│ │ ├─ num_cmd = 1
|
||||
│ │ ╰─ cmd[0]
|
||||
│ │ ╰─ t_simple_cmd
|
||||
│ │ ├─ words = [echo][hello][there]
|
||||
│ │ ╰─ t_redir_list
|
||||
│ │ ├─ redirection[0]
|
||||
│ │ │ ╰─ t_redirection
|
||||
│ │ │ ├─ t_redir_type = REDIR_HERE_DOC
|
||||
│ │ │ ╰─ marker = [HERE_DOC]
|
||||
│ │ ├─ redirection[1]
|
||||
│ │ │ ╰─ t_redirection
|
||||
│ │ │ ├─ t_redir_type = REDIR_OUTPUT
|
||||
│ │ │ ╰─ marker = [outfile]
|
||||
│ │ ├─ redirection[2]
|
||||
│ │ │ ╰─ t_redirection
|
||||
│ │ │ ├─ t_redir_type = REDIR_INPUT
|
||||
│ │ │ ╰─ marker = [infile]
|
||||
│ │ ├─ redirection[3]
|
||||
│ │ │ ╰─ t_redirection
|
||||
│ │ │ ├─ t_redir_type = REDIR_INPUT
|
||||
│ │ │ ╰─ marker = [infile2]
|
||||
│ │ ╰─ redirection[4]
|
||||
│ │ ╰─ t_redirection
|
||||
│ │ ├─ t_redir_type = REDIR_APPEND
|
||||
│ │ ╰─ marker = [append]
|
||||
│ ╰─ t_operator = END
|
||||
╰─ (no redirections)
|
||||
EOF
|
||||
|
||||
when_run <<EOF "a single command in parentheses is has the parenthesis implicitly removed"
|
||||
(echo hi)
|
||||
EOF
|
||||
# this is how it is handled in bash:
|
||||
# doing a `ps uf` on bash running `sleep 10`
|
||||
# \_ bash --norc
|
||||
# \_ sleep 10
|
||||
# and `(sleep 10)`
|
||||
# \_ bash --norc
|
||||
# \_ sleep 10
|
||||
# this is exactly the same process graph
|
||||
expecting <<EOF
|
||||
╰─ t_cmdgroup
|
||||
├─ t_cmdlist
|
||||
│ ├─ num_cmds = 1
|
||||
│ ╰─ cmd[0]
|
||||
│ ├─ t_cmdlist_item
|
||||
│ │ ╰─ t_pipeline
|
||||
│ │ ├─ num_cmd = 1
|
||||
│ │ ╰─ cmd[0]
|
||||
│ │ ╰─ t_simple_cmd
|
||||
│ │ ├─ words = [echo][hi]
|
||||
│ │ ╰─ (no redirections)
|
||||
│ ╰─ t_operator = END
|
||||
╰─ (no redirections)
|
||||
EOF
|
||||
|
||||
when_run <<EOF "a single cmdlist in parenthesis has the parenthesis implicitly removed"
|
||||
(echo hi >> append | echo < infile bye && echo hello > outfile)
|
||||
EOF
|
||||
expecting <<EOF
|
||||
╰─ t_cmdgroup
|
||||
├─ t_cmdlist
|
||||
│ ├─ num_cmds = 2
|
||||
│ ├─ cmd[0]
|
||||
│ │ ├─ t_cmdlist_item
|
||||
│ │ │ ╰─ t_pipeline
|
||||
│ │ │ ├─ num_cmd = 2
|
||||
│ │ │ ├─ cmd[0]
|
||||
│ │ │ │ ╰─ t_simple_cmd
|
||||
│ │ │ │ ├─ words = [echo][hi]
|
||||
│ │ │ │ ╰─ t_redir_list
|
||||
│ │ │ │ ╰─ redirection[0]
|
||||
│ │ │ │ ╰─ t_redirection
|
||||
│ │ │ │ ├─ t_redir_type = REDIR_APPEND
|
||||
│ │ │ │ ╰─ marker = [append]
|
||||
│ │ │ ╰─ cmd[1]
|
||||
│ │ │ ╰─ t_simple_cmd
|
||||
│ │ │ ├─ words = [echo][bye]
|
||||
│ │ │ ╰─ t_redir_list
|
||||
│ │ │ ╰─ redirection[0]
|
||||
│ │ │ ╰─ t_redirection
|
||||
│ │ │ ├─ t_redir_type = REDIR_INPUT
|
||||
│ │ │ ╰─ marker = [infile]
|
||||
│ │ ╰─ t_operator = AND
|
||||
│ ╰─ cmd[1]
|
||||
│ ├─ t_cmdlist_item
|
||||
│ │ ╰─ t_pipeline
|
||||
│ │ ├─ num_cmd = 1
|
||||
│ │ ╰─ cmd[0]
|
||||
│ │ ╰─ t_simple_cmd
|
||||
│ │ ├─ words = [echo][hello]
|
||||
│ │ ╰─ t_redir_list
|
||||
│ │ ╰─ redirection[0]
|
||||
│ │ ╰─ t_redirection
|
||||
│ │ ├─ t_redir_type = REDIR_OUTPUT
|
||||
│ │ ╰─ marker = [outfile]
|
||||
│ ╰─ t_operator = END
|
||||
╰─ (no redirections)
|
||||
EOF
|
||||
|
||||
when_run <<EOF "quotes are removed"
|
||||
echo "this contains quotes"
|
||||
EOF
|
||||
expecting <<EOF
|
||||
╰─ t_cmdgroup
|
||||
├─ t_cmdlist
|
||||
│ ├─ num_cmds = 1
|
||||
│ ╰─ cmd[0]
|
||||
│ ├─ t_cmdlist_item
|
||||
│ │ ╰─ t_pipeline
|
||||
│ │ ├─ num_cmd = 1
|
||||
│ │ ╰─ cmd[0]
|
||||
│ │ ╰─ t_simple_cmd
|
||||
│ │ ├─ words = [echo][this contains quotes]
|
||||
│ │ ╰─ (no redirections)
|
||||
│ ╰─ t_operator = END
|
||||
╰─ t_simple_cmd
|
||||
├─ words = [echo][hello]
|
||||
╰─ (no redirections)
|
||||
EOF
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue