March 26, 2008

wildcardとsort order

shellでecho *みたいなことをした結果があるマシンではfoo 00-barで、あるマシンでは00-bar fooと結果が異なる問題の原因を追求していた。結論から言うと、出力結果のソートにstrcoll(3)あるいはそれに類する関数を使っていて、こいつがcurrent localeによって結果が違う、ということだった。

ざっとkernelからglibc、bash(ついでにsortも)と追いかけて、途中薄々気づきはしたものの、結果にたどり着くまでえらく時間を使ってしまった。コードの追いかけに付き合ってくれたjetに感謝。

No comments: