- 要件に明記されているケースも必ず試すこと
- 要件を満たしており、クラッシュしないのなら、下記のテストで正しい挙動が確認できなかった場合でもディフェンス次第でOKとすること
- ctrl+v + tabで\tを入力可能、チェックすること
- leaksコマンドを頻繁に打つこと
- グローバル変数がシグナル用に1つしか使用されていないことを以下のコマンドで確認すること
nm --defined-only minishell | grep -v " T " | grep -v " t "
- 以下のコードを適切な位置に追加しfdの閉め忘れをチェックすること
int fd = dup2(1);
printf("%d", fd);
close(fd);
echo - aaa #- aaa
echo -nnnnnn aaa #aaa%
echo -nnnna aaa #-nnnna aaa
echo -n -n -n -n -n aaa #aaa%
exit a b #numeric argument required, exitする
exit + #numeric argument required
exit - #numeric argument required
exit 1 a #too many arguments, exitしない
exit <LONG_MAX + 1> #numeric argument required
Return value of a process
./minishell
./minishell
#ctrl+c連打
export aaa
env #aaaは出力されない
export #ascii順で、declare -x key="value"もしくはdeclare -x keyの羅列が出力される
export $aaa $bbb $ccc
#declareが出力される
export a=" touch a b c d e "
$a
export a=" export b=c d=e" f=g
$a
export 1 #not a valid identifier
unset PATH
ls #No such file or directory
unset TERM
clear #TERM environment variable not set
#zsh/bash
mkdir dne
cd dne
rm -rf ../dne
#minishell起動
cd . #error retrieving current directory
cd .. #有効
#zsh/bash
mkdir noperm
chmod -x ../noperm
#minishell起動
cd . #error retrieving current directory
cd .. #有効
mkdir dne
cd dne
rm -rf ../dne
pwd #有効
mkdir dne
cd dne
chmod -x ../dne
pwd #有効
#cdの2ケースと同じ条件を作る
pwd #error retrieving current directory
mkdir dir
./dir #is a directory
#コマンドど同名の実行ファイルをカレントディレクトリに作成(lsなど)
export PATH=$PWD:$PATH
ls #作成した方のlsが実行される
echo > outfile aaa
cat outfile #aaa
echo aaa > outfile1 > outfile2 > outfile3
cat outfile1 #有効
cat outfile2 #有効
cat outfile3 #aaa
cat << "
cat << EOF" #シングルクオーテーションでも同様のチェック
echo aaa > outfile | cat -e #出力なし
cat outfile #aaa
ls | ls | aaa
echo $? #127
aaa | ls | ls
echo $? #0
export PS1="minishell$ "
bash #プロンプトが書き換わっている
while [ 1 ]
do
kill -s SIGINT <pid>
done