Ubuntu 10.04から12.04.1にアップグレードしたらfile(1)の出力内容が変わった。スクリプトファイルのテキストのエンコーディングを出力するようになったようだ。
例えば10.04の頃の出力はこんな感じだった。
# Groovy 2.0.5付属の起動用シェルスクリプトで実験 $ file groovy groovy: POSIX shell script text executable
12.04.1ではこうなった。
$ file groovy groovy: POSIX shell script, ASCII text executable
これに気づいたのは id:eel3:20121112:1352651058 のMakefileに手を入れた時。Go言語のコンパイラ用の処理を追加したので、既存の他の言語(GroovyやScalaなど)用の処理でデグレーションしてないか確かめようとしたら動かなかった。
Makefile中でfile(1)の出力を加工する関数を定義していて、こんな感じだった。
# $(call shell-script-list,dir-name) shell-script-list = $(shell \ file $(wildcard $(LANGSDIR)/$1/*) | \ awk ' \ /(python|shell) script text executable/ { \ sub(/:$$/, "", $$1); \ print $$1 \ }')
awk(1)で正規表現を使ってシェルスクリプトないしPythonのスクリプトのみ取り出そうとしているのだけど、file(1)の出力にテキスト・エンコーディングの情報が追加された為にマッチしなくなっていた。
修正は安直にこんな感じで。
# $(call shell-script-list,dir-name) shell-script-list = $(shell \ file $(wildcard $(LANGSDIR)/$1/*) | \ awk ' \ /(python|shell) script, (ASCII|UTF-8 Unicode) text executable/ { \ sub(/:$$/, "", $$1); \ print $$1 \ }')
file(1)の出力って結構変化するのだろうか?