Hi!

----

During testing I found a small glich if a script or user switches the
locale in a subshell.

Example:
-- snip --
$ set | /usr/xpg4/bin/egrep "LC_|LANG"
LANG=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
$ (export LC_ALL=ja_JP.UTF-8 ; man ls)
# view manual page in japanese
$ foo
/bin/ksh93: foo: not found [<japanese characters here>]
-- snip --

It seems the subshell sets LC_ALL to "ja_JP.UTF-8" but when the subshell
exists |setlocale()| is not called again to restore the values. Forcing
an internal call to |fork()| for a subshell for example using the $
ulimit # builtin works around the problem.
Example:
-- snip --
$ set | /usr/xpg4/bin/egrep "LC_|LANG"
LANG=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
# call ulimit to make sure the subshell runs in a |fork()|'ed child
process
$ (ulimit -c 0 ; export LC_ALL=ja_JP.UTF-8 ; man ls)
# view manual page in japanese
$ foo
/bin/ksh93: foo: not found [No such file or directory]
-- snip --

----

Bye,
Roland

-- 
  __ .  . __
 (o.\ \/ /.o) roland.mainz at nrubsig.org
  \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
  /O /==\ O\  TEL +49 641 7950090
 (;O/ \/ \O;)

Reply via email to