habvi / 42_minishell

Re-implemented a simple shell.
4 stars 0 forks source link

Update declare #191

Closed ak0327 closed 1 year ago

ak0327 commented 1 year ago

declareのupdate

cd後のPWD, OLDPWDの更新のため、declare_arg() に 引数attrを渡してみたところ ft_declareが属性変更、変数登録などできそうだったのでupdate


ft_export周りのfix


残課題

Issue #186

ak0327 commented 1 year ago

この辺りはできた

# 初期値
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD="/home/user42/42vm/minishell/42_minishell"

# 既存の属性を維持したままvalue変更
minishell declare PWD=aaaa
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD="aaaa"

# keyがなく、属性を指定しない場合はシェル変数として追加
minishell unset PWD
minishell declare PWD=aaaa
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -- PWD="aaaa"

# keyがなく、属性を-xで指定した場合は環境変数として追加
minishell unset PWD
minishell declare -x PWD=aaaaaaa
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD="aaaaaaa"


あとはこれだけ -> varのvalueをt_var_infoに変更したため、key only, value=NULL( t_var_info = NULL)の条件が消滅しているっぽい...? exportもばぐってる

minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD="/home/user42/42vm/minishell/42_minishell"
minishell declare -x PWD
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD   # <- value=NULLになる

# bashは属性を変更するだけ
bash$ unset PWD
bash$ PWD=aaaaaa
bash$ declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -- PWD="aaaaaa"
bash$ declare -x PWD
bash$ declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD="aaaaaa"
ak0327 commented 1 year ago

できた add, joinする前にkeyがあってchar *value=NULLの場合、既存のvalueを取得するようにした var_add, var_joinでif (!value); return ;などが不要となり、分岐がシンプルになりそう

# 初期値
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD="/home/user42/42vm/minishell/42_minishell"

# PWDの属性を変更 -x -> --
minishell declare +x PWD
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -- PWD="/home/user42/42vm/minishell/42_minishell"

# PWDの属性を変更 -- -> -x by export
minishell export PWD
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD="/home/user42/42vm/minishell/42_minishell"

# PWDの属性を変更 -- -> -x by declare
minishell unset PWD
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"

minishell declare PWD=aaa
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -- PWD="aaa"

minishell declare -x PWD
minishell declare -p | /bin/grep PWD
declare -x OLDPWD="/home/user42/42vm/minishell/42_minishell"
declare -x PWD="aaa