_ おひさしぶりです。このところ仕事でやたらシェルスクリプトを書きまくっております。sh だけで1500行って、われながらスゴい量だな。べつに perl とか ruby とか使わなくたって、データの持ち方を工夫すればほとんど sh の内部コマンドだけで複雑な処理はできるんだよ。
_ 最近書いてるスクリプトでも何十回となく出現してる、ありがちなコード。ワイルドカードにマッチしたファイルすべてに対して何らかの処理をおこなう。こんなの。
これ、バグになりやすい。マッチするファイルがひとつも存在しないとき、空文字列に展開してくれればいいのに、なぜかファイル名ではなく "*" という元の文字列が返る。解せないんだけどそういう仕様(sh ではなく csh なら空文字列になる)。なので、存在しない "*" というファイルに対してなんか処理しようとしてコケる、という結果になる。もちろん、"*" じゃなくて hoge??? とか [a-z] とかでも同じ。for file in *; do # なんか処理 done_ バグを踏まない正しいコード。
"*" という文字列だったら処理をすっとばすようにする。ま、ほんとに * という名前のファイルが存在してる場合に逆に処理がスキップされちゃうわけなんで、これはこれで正しくないんだけどね。まあ、そんなおかしなファイル名を処理対象にすることはふつーないだろうからたぶん問題なし。これにもちゃんと対処するならば、for file in *; do case "$file" in "*") continue;; esac # なんか処理 doneとした方がいいのかな。stat(2) が増えるのがイヤだけど。for file in *; do if [ -e "$file" ]; then # なんか処理 fi done_ ちなみに、
のように書く人もいますが、やめましょう。ls は無駄なだけでなく、ワイルドカードにマッチするファイルが大量に存在して、長さが ARG_MAX を越えるとエラーになる。for file in *;... と書いた場合は、ARG_MAX を越えてもエラーにならない(sh のビルトインは長さ制限を受けない)。for file in `ls *`; do # なんか処理 done
_ ちうことで、今日で仕事納めのはずだったんだけど、終わらず月曜日も出社することが確定。自分の分はほぼ終わってるんだけど、相方との調整が終わらん。家庭があるとクリスマスは早くうちに帰りたいよねぇ。わしゃ関係ないけど。
_ おれ、今テスト環境に投入したスクリプトがうまく動いたら冬休みに入るんだ…。
_ 動いたみたい。それではみなさん今年もお世話になりました。来年もよろしくお願いします。よいお年を。
_ 月曜の夜に東京を出発して、ひたすら西へ 1100km 走って、きのうの夕方に九州上陸。うーんと、たぶん15年ぶりくらいかな。
_ 今日は耶馬渓→やまなみハイウェイ→阿蘇山で270km。九州って南国じゃなかったんですか。なんで雪積もってるんですか。スタッドレス履かないと死ぬよ、と言われてたので半信半疑で装備していったんだけど大正解でした。うっすら雪化粧、どころじゃないマジ雪道。たしかに標高1000m越えてるんだから雪ぐらい降るだろうけどさ、しかしここまでとはまったく予想してなかった。車外に出ると完全冬装備でもむちゃくちゃ寒いし。
_ 雪はともかく、このあたりの道は運転しててすげー気持ちいい。今日走った区間の多くは放牧地になってるもんだから森じゃなくて草原(この季節なんで緑の原っぱじゃないけど)の中で、また、山とはいえそれほど勾配のきつくない丘みたいなところが多く、見晴らしがひじょーによい。観光ガイドには緑の濃い季節の写真ばっかり載ってるけど、枯れ草の黄色と雪の白のコントラストというのもなかなかおもしろい風景だ。山の上の方は雲がかかってたのが残念。
_ 草千里ヶ浜にある池の「中」から見た烏帽子岳。池が完全に凍結してるもんだから、こうやって池の真ん中まで歩いていけちゃう。
_ タイトル落ち。そういえば15年前に長崎に来たときも雨だったよ。
_ つーか、雨だけじゃなくて雪まで降るし。山の上ならともかく、海のすぐそばでも降ってるし。九州は南国じゃなかったのかよ。風も強かったしむちゃくちゃな天気。ついでにこの天気のせいなのか年末だからなのか普段からそうなのかはわからんけど、道路もめちゃ混みで行きたいところもいくつか断念して、なんとか辿りついたところも悪天候で5分で退散する始末。とにかくひどい一日だった。このぶっこわれたビニール傘をどうしてくれよう。
_ かの有名な長崎の夜景だが、もともと夜に来るつもりはまったくなくて、単純に予定が大幅に狂った結果でしかない。
_ 15年ぐらい前、正確にはたぶん97年5月だったと思う。復旧間もない島原鉄道とバスを乗り継いで雲仙に行ったんだよね。今度は車で再訪。夜のうちにかなり雪が積もった道をずんずん登って雲仙の温泉街へ。雪が見たいなら雲仙じゃなくて東北のどっかの温泉に行くんだけどなぁ、とか思いながら地獄めぐりして、お風呂に入って、とかしてたのは、今から思えばずいぶん呑気だった。山から下るころにまた雪が降りだして、どんどん激しくなる。
_ ひどい雪の中やっと下まで降りてきて天草にフェリーで渡ろうとしたものの、雪で視界不良のため運航中止してる、と言われる。えぇぇぇ、渡れないとすると今後の行動予定が完全にぶっこわれてたいへんなことになるんだけどどうしよう、とあわててたら、10分ぐらいして運航再開するというアナウンスが流れた。びっくりさせないでほしいよ。
_ 無事天草に渡ったものの、いや、ひどい雪。青い空明るい太陽の南国イメージの天草なのに、眼前にあるのは雪に覆われたモノクロ世界。クリスマスの飾りつけがまだ残されている大江天主堂、崎津天主堂あたりを見ると、雪も似合うのかもしれないけどさ、でもそういうのを期待してここまで来たわけじゃないんだよね、うん。
_ そして天草から帰る道として最短距離の山道を選んだらたいへんなことになった。最高点でも標高200mちょっとしかないはずなんだけど、猛烈な雪。除雪車を追い越して300m走ったら別の除雪車が作業してた。ぜんぜん除雪が追いついてない。「おれ冬タイヤ履いてるもんねー」とばかりに悠々と走ってた前の車が目の前でスピンしやがって巻き添えくいかけたり、郵便のトラックが立ち往生してたり、郵便配達のバイクがコケたり、ここから帰れるんだろうかとまじめに心配した(そうなっても安心の車中泊装備)。
_ で、雪は昼すぎにはやんだんだけど、なんで凝りずにわしはまた山の中に入りこんでますかね。いま、目の前にはライトアップされた通潤橋が。外は氷点下だけど、わしは湯たんぽであったか。今年はここで年越し。また来年もよろしく。つーか、来年というより、明日の朝のことが心配だ。また夜の間に雪になったらどうすんべ。
_ 雲仙の地獄にいたわんこたち。ふつーの犬の姿をしてるけど実は地獄の門番ケルベロスに違いない。
天草の崎津天主堂。激しく雪が降ってるけどどっかの山奥ではなく、10m も歩けば海。すぐそばには神社もあって、ああやっぱり日本の神様も捨てられないんだなと思った。