On Mon, Aug 02, 2010 at 11:02:20PM +0200, Arfrever Frehtes Taifersar Arahesis
wrote:
> It would have to be parsed using e.g. grep and sed. It's easier to call
> Python in this case.
It's even easier not to.
> The call to Python is sufficiently fast:
>
> $ time python -c 'import os; print(os.environ.get("LC_ALL",
> os.environ.get("LC_CTYPE", os.environ.get("LANG", "POSIX"))))' > /dev/null
>
> real 0m0.062s
> user 0m0.051s
> sys 0m0.011s
Let's compare. On my system:
time python -c 'import os; print(os.environ.get("LC_ALL",
os.environ.get("LC_CTYPE", os.environ.get("LANG", "POSIX"))))'
en_GB.UTF-8
real 0m0.020s
user 0m0.016s
sys 0m0.004s
time sh -c 'echo "${LC_ALL:-${LC_CTYPE:-${LANG:-POSIX}}}"'
en_GB.UTF-8
real 0m0.001s
user 0m0.000s
sys 0m0.000s
And that's after several runs for both, so it's not caused by the
initial load of python, which wasn't in memory yet.
Yes, 0.019s is very little, but in this case I see absolutely no benefit
whatsoever in calling python. Plus sh has the advantage of actually
working when LC_ALL is exported as "" (which in LC_* means the same as
having it unset)...
But why exactly are you concerned about LC_* being defined but not
exported anyway? You're checking from an ebuild; locales are going to
get inherited from portage or profile.env anyway, so you can just
assume that if they _are_ set, they're exported. The only way they might
not be is if the user is messing with the locale from the bashrc, and if
the user's doing that, the user really needs to fix the bashrc and
export the vars anyway.
None of this changes the fact that locale checks warns about bugs in packages,
not bugs in the user's configuration.