[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00005] case sentence (Re: Re: FDclone 2.01 has beenreleased)
- Subject: [FDclone-users:00005] case sentence (Re: Re: FDclone 2.01 has beenreleased)
- From: Taketoshi Sano <sano@debian.org>
- Date: Sat, 18 May 2002 09:17:53 +0900
佐野@浜松です。
In <200205090551.OAA24649@pon.nintendo.co.jp>,
on "Thu, 09 May 2002 14:51:35 +0900",
with "[FDclone-users:00003] Re: FDclone 2.01 has been released",
Takashi SHIRAI <shirai@nintendo.co.jp> wrote:
shirai> > TS> case リスト終端の ;; が省略できなかった点を修正。
shirai> >
shirai> > あ、このあいだ話題になったものですね。
shirai> > 文法とか書いてある本にも書いていないところなので、なかなか
shirai> > 気付かないところだと思います。
shirai>
shirai> POSIX の規格書読んでいるとこっそり書いてあったりして、それ
shirai> で Bourne shell の実装を調べたらそうなっていたんで、慌てて実
shirai> 装した部分です。
shirai> 普通に script 書く人は省略したりはしないと思うんですが。
これは esac の手前、一番最後の ;; なんですね。
他の部分も省略できるのかなと試してみたら、エラーになってしまいました。
で、他にもいろいろ試しているうちに、こんな症状が起きました。
# echo $CHK
# echo $TEST
# CHK=test . ./chk.sh
./chk.sh: chk): unexpected token
Killed
bash:/tmp/chk# cat chk.sh
case $CHK in
test, chk)
TEST=yes
;;
notest)
TEST=no
;;
esac
echo "CHK: " $CHK
echo "TEST: "$TEST
bash:/tmp/chk# fdsh
# CHK=test . ./chk.sh
./chk.sh: chk): unexpected token
Killed
bash:/tmp/chk#
上記のように case 文のパターン評価( ")" の前) に
空白で区切られた不正な構文のスクリプトを渡すと、
キーボード入力に対する反応がまったく無くなり、
CPU 時間を大量に消費するようになります。
念のために他の shell でも試してみましたが、
bash:/tmp/chk# ash
$ . chk.sh
.: chk.sh: not found
$ . ./chk.sh
./chk.sh: 2: Syntax error: word unexpected (expecting ")")
./chk.sh:
$ exit
bash:/tmp/chk# . ./chk.sh
bash: ./chk.sh: line 2: syntax error near unexpected token `chk)'
bash: ./chk.sh: line 2: ` test, chk)'
bash:/tmp/chk# ksh
# . ./chk.sh
ksh: ./chk.sh[2]: syntax error: `chk' unexpected
# exit
bash:/tmp/chk# zsh
$ . ./chk.sh
./chk.sh:2: parse error near `chk'
$
bash:/tmp/chk# fdsh
# . ./chk.sh
./chk.sh: chk): unexpected token
Killed
bash:/tmp/chk# fdsh
となり、kill しなければいけないのは fdsh だけです。
なお . ではなく fdsh chk.sh のように実行した場合は
# fdsh ./chk.sh
./chk.sh: chk): unexpected token
#
となり、反応が無くなることはありません。
スクリプトの構文が不正な場合でも、そのまま反応が
無くなってしまうのは不便なので、スクリプトの処理を
中止してプロンプトに戻ってくれるほうがありがたいのですが、
いかがでしょう ?
--
Taketoshi Sano: <sano@debian.org>,<sano@debian.or.jp>,<kgh12351@nifty.ne.jp>