TR-42 / minishell

https://tr-42.github.io/minishell/
0 stars 0 forks source link

リダイレクト機能の実装 (heredocを除く) #13

Closed TetsuOtter closed 1 year ago

TetsuOtter commented 1 year ago

リダイレクト機能の実装を行いました。

これにより、以下の機能が使用可能になります。

なお、それぞれファイル名は変数展開に対応しますが、現状変数管理/展開機能が未実装のため、変数名がそのままファイル名に入ります。 (argv生成と同じ関数を使用しているため、そちらで変数展開機能を実装し次第、こちらでも変数展開がなされます)

heredoc機能については未実装/未テストです。

また、ついでにSTDIN / STDOUTの退避機能も実装しました。 これにより、子プロセスでexecve実行成功までにexitした場合にconsoleでleaksを確認できるようになります。

一部エラー出力について、bashと異なるエラー出力となっています。 これを直す場合は、最後にまとめて直します。 (正直、このままでも良いとは思いますが)

テスト一覧

bash-3.2$ touch bash_out mish_out
bash-3.2$ bash -c 'ls | cat > bash_out'
bash-3.2$ ./minishell -c 'ls | cat > mish_out'
bash-3.2$ diff bash_out mish_out 
bash-3.2$ echo $?
0
bash-3.2$ bash -c '< bash_out cat | cat'
Makefile
a
a.out
bash_out
headers
libft
minishell
mish_out
obj
srcs
bash-3.2$ ./minishell -c '< msh_out cat | cat'
minishell: msh_out: No such file or directory
bash-3.2$ ./minishell -c '< mish_out cat | cat'
Makefile
a
a.out
bash_out
headers
libft
minishell
mish_out
obj
srcs
bash-3.2$ 
bash-3.2$ echo abc > a
bash-3.2$ bash -c 'cat < a | cat >> b1 >> b2'
bash-3.2$ cat b1
bash-3.2$ cat b2
abc
bash-3.2$ bash -c 'cat < a | cat >> b1 >> b2'
bash-3.2$ cat b1
bash-3.2$ cat b2
abc
abc
bash-3.2$ ../minishell -c 'cat < a | cat >> m1 >> m2'
bash-3.2$ cat m1
bash-3.2$ cat m2
abc
bash-3.2$ ../minishell -c 'cat < a | cat >> m1 >> m2'
bash-3.2$ cat m1
bash-3.2$ cat m2
abc
abc
bash-3.2$ 
bash-3.2$ bash -c 'a>b|./c'
bash: b: Permission denied
bash: ./c: No such file or directory
bash-3.2$ ./minishell -c 'a>b|./c'
minishell: b: Permission denied
./c: No such file or directory
bash-3.2$ 
TetsuOtter commented 1 year ago

f0f50d8fa547677d9b2999a78cb9ca1882a14cea (「execveエラー時にエラー情報を出力するようにした」) およびそれ以前は、#10 での変更内容です。 リダイレクト関連の (今回のPRの) 変更は 28da297ef40e129a287f95265a15fdc76a78563e...42dab71efa03d5f24f6b3cc01240b7a8f3e84f13 です。

PRの「Files changed」で今回の変更のみを確認する場合は、こちらのリンクよりご確認ください。 https://github.com/TR-42/minishell/pull/13/files/bf14da16893158525fea1ea8b24426d4e21e4217..42dab71efa03d5f24f6b3cc01240b7a8f3e84f13