[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00005] case sentence (Re: Re: FDclone 2.01 has beenreleased)



佐野@浜松です。

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>