Open ak0327 opened 1 year ago
入力コマンドを構造体->木構造とする方針で実装できる感触が掴めました。 pipeのみの試験ですが、以下のように正常に出力されるところまで確認済みです。 今後はpipe以外(and, or, subshell, etc)を適当な順番に展開していく実装を予定しています。
minishell $> echo hello | cat Makefile | grep a | grep @
// vv debug print vv
#DEBUG[print_stack : print stack]
[root]
|
[pipe]
|
[cmd]--[echo], [hello]
[cmd]--[cat], [Makefile]
[cmd]--[grep], [a]
[cmd]--[grep], [@]
// ^^debug print ^^
// command output
@make -C $(LIBFT_DIR)
@make -C $(LIBGNL_DIR)
@make -C $(LIBFT_PRINTF_DIR)
@mkdir -p $$(dirname $@)
@make clean -C $(LIBFT_DIR)
@make clean -C $(LIBGNL_DIR)
@make clean -C $(LIBFT_PRINTF_DIR)
@make fclean -C $(LIBFT_DIR)
@make fclean -C $(LIBGNL_DIR)
@make fclean -C $(LIBFT_PRINTF_DIR)
minishell $>
上記、一旦Pendingして他の実装を進めます。 pipeは実行できるため、Mandatoryクリアに向けてに全体の完成度を高めるため。 他のパートの完成度が高まり次第、subshell, (and, or)に取り掛かる予定。
MEMO
MEMO
// test1
minishell $> echo hello | grep a | hoge | echo "hello | grep grep || test" | echo 'hogehoge | test "||foobar"'
#print tree
#DEBUG[print_stack : check tree]
[root]
|
[pipe]
|
[cmd]--{"echo", "hello"}
[cmd]--{"grep", "a"}
[cmd]--{"hoge"}
[cmd]--{"echo", ""hello | grep grep || test""}
[cmd]--{"echo", "'hogehoge | test "||foobar"'"}
// test2
minishell $> echo hello || grep a
minishell: syntax error near unexpected token `||'
minishell $> echo hello | grep a > out | cat << end > out | echo "hoge > in | test|" |echo'test"test"|hoge'>>out
#DEBUG[print_stack : check tree]
[root]
|
[pipe]
|
[cmd]--{"echo", "hello"}
[cmd]--{"grep", "a", ">", "out"}
[cmd]--{"cat", "<<", "end", ">", "out"}
[cmd]--{"echo", ""hoge ", ">", " in | test|""}
[cmd]--{"echo", "'test"test"|hoge'", ">>", "out"}
|と<>を段階的にsplitしているが、ひとつの関数で纏められるはず(気が向いたら or bonusで実装する)
残課題(bonus用に再実装する際に反映)
Implement analysis part