Error handling
Closed this issue · 5 comments
kefujiwa commented
bash との挙動差異。
リストアップ。
- No.1 ▼スペース区切りの環境変数展開時の引数の渡され方が異なる
bash-3.2$ export hello="aa bb cc dd"
bash-3.2$ touch $hello ←4つの文字列が個別に引数で渡される
bash-3.2$ ls
aa
bb
cc
dd
bash-3.2$ touch "$hello" ←1つの引数で渡される
bash-3.2$ ls
aa bb cc dd
bash-3.2$ export
declare -x a="a b c"
bash-3.2$ echo $a ←3つの文字が個別に引数で渡される
a b c
bash-3.2$ echo "$a" ←1つの引数で渡される
a b c
- No.2 ▼子プロセスのexitはメッセージ出さない
bash-3.2$ exit | exit | exit | exit
bash-3.2$
- No3. ▼bashだとクォート閉じずにCtrl-Dの終了ステータスが258になる
bash-3.2$ echo "safasf
>
> bash: unexpected EOF while looking for matching `"'
bash: syntax error: unexpected end of file
bash-3.2$ echo $?
258
- No.4 ▼command not foundのとき一律0になってしまっている(bashだと127)
bash-3.2$ sadfa
bash: sadfa: command not found
bash-3.2$ echo $?
127
-
No.5 ▼ambiguos redirect(今回は対応しない)
bash-3.2$ export hello="aa bb cc dd"
bash-3.2$ > $hello
bash: $hello: ambiguous redirect
bash-3.2$ > $hello\\"dsfsafdsa"sfdsafdafaf"dsafasfa"
bash: $hello\\"dsfsafdsa"sfdsafdafaf"dsafasfa": ambiguous redirect
- No.6 ▼bashだと下記ケースでドルマークが消える
bash-3.2$ echo $"sdfadfs"
sdfadfs
-
No.7 ▼exportの変数一覧のソート順がASCII順
-
No.8 ▼リダイレクトエラー時の終了ステータスが0になってしまう(bashだと1)
minishell$ < aaa
minish: aaa: No such file or directory
minishell$ echo $?
0 ← 1 であるべき
-
No.9 ▼ドットのみ入力した際のエラーメッセージと終了ステータスが特殊(対応不要)
bash-3.2$ .
bash: .: filename argument required
.: usage: . filename [arguments]
bash-3.2$ echo $?
2
- No.10 ▼exitした場合、直前の終了ステータスが$?に入る
bash-3.2$ exit < aaa
bash: aaa: No such file or directory
bash-3.2$ exit
exit
bash-3.2$ echo $?
127
- No.11 ▼cdに指定したパスが存在しない場合にOLDPWDが変わってしまう(bashだと変わらない)
bash-3.2$ export
declare -x OLDPWD="/Users/kefujiwa/Work"
declare -x PWD="/Users/kefujiwa"
declare -x SHLVL="1"
bash-3.2$ cd aaaaaa
bash: cd: aaaaaa: No such file or directory
bash-3.2$ export
declare -x OLDPWD="/Users/kefujiwa/Work"
declare -x PWD="/Users/kefujiwa"
declare -x SHLVL="1"
tkomatsu commented
No.1は環境変数の展開のタイミングを変えないとできなそうだね。
読み込みのタイミングで展開しているようにみえるのだけど 🤔
環境変数展開のタイミングはNo.6にも影響しそうな内容ですね
tkomatsu commented
No.9ですが、.
は組み込みコマンドに当たるので対応不要だと思います。
man bash
でSHELL BUILTIN COMMANDSの項目の一番最初に記載があります。
実際はsource
と等価のようです。
help .
で説明が出てくるので、ビルトインコマンドとしています。
bash-3.2$ help .
.: . filename [arguments]
Read and execute commands from FILENAME and return. The pathnames
in $PATH are used to find the directory containing FILENAME. If any
ARGUMENTS are supplied, they become the positional parameters when
FILENAME is executed.
bash-3.2$ help source
source: source filename [arguments]
Read and execute commands from FILENAME and return. The pathnames
in $PATH are used to find the directory containing FILENAME. If any
ARGUMENTS are supplied, they become the positional parameters when
FILENAME is executed.
tkomatsu commented
@kefujiwa
PRにissueを含めると全て完了していなくても閉じてしまうみたいです。
PRに入れたいけど、完了にしたくない時はどうしましょうね。
issueを細かく分けるのは一つだとは思うのですが、わざわざissue立てるのめんどくさいですよね。
kefujiwa commented
本来なら細かく分けるべきなのかな、、
でも確かにめんどくさい笑
後、リスト形式で保持する方がパッと見てわかりやすいのもあるので、issueが完了していない場合はPRにissueを含めないようにします。。