Ubuntuを10.04から12.04にしたらfile(1)の出力内容が変わった

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)の出力って結構変化するのだろうか?