シェルの話。
repeat って便利ね。繰り返してくれるシェル内蔵コマンドね。
SunOS の lpq は、
% lpq 3
のようにすると、プリンタキューが消えるまで3秒毎にlpqを繰り返してくれ るんだけど、BSDなlpqは一回で終わっちゃう。こんなときは、repeat使うでござ る。
% repeat 10 lpq
およよよ、速すぎや。waitをかけたい。一定時間止まるのはsleepだったな。 じゃあこうしようかな?
% repeat 10 lpq; sleep 3
これダメね。何故ならセミコロンまでがひとつのコマンド列と見なされちゃ うから、10回繰り返してから sleep 3 が一回だけ評価される。じゃあ、セミコ ロンがマルチステートメントを意味しないようにクォートしてみようか。
% repeat 10 "lpq; sleep 3"
はい、これもダメ。「lpq; sleep 3: Command not found」ね。結局repeatは ひとつのコマンドのみを繰り返せるだけ。そんなときは eval を使うと良い。
% repeat 10 eval "lpq; sleep 3"
evalは任意の文字列を再度コマンドラインとして評価してくれる。
さて、ここで次の repeat が効くかどうか手元のシェルで試してみたまへ。
% repeat 10 eval "echo -n . ; sleep 1"
これは画面にピリオド(.)を一秒置きに10個表示するためのrepeatである。 「そんなのできるに決まってるじゃん」と思う君は正しい。10個のピリオドが現 れなかった君は、使っているシェルは実はいい加減な作りだったと認識すること になるだろう。