被linux的locale坑惨了

公司有需求写个查看svn历史日志的脚本。本来以为很简单,就是svn log就ok了。。哪知道结果中文乱码。好不容易找到locale命令。修改了一下LANG字段,结果一路走坑网上的教程果然只适合他们自己啊。下面就记录一下我走过的坑吧。

1、首先,locale的配置文件在:/etc/default/locale位置,最终我修改成如下内容
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
1、但是我执行:locale时发现LANG并没有被修改,结果如下
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
3、然后我就千不该万不该相信以前的人写的LANG=en_US.UTF-8,妈的我执行完echo $LANG发现已经生效了。
but当我执行svn log时还是乱码的。百思不得其解,最后网上找资料,很多人都是用的临时生效,多了一个export。
-------------------------
唉,果然被坑惨了,LANG是个环境变量要生效必须使用export,如果执行单纯的LANG=en_US.UTF-8那只是对LANG变量赋值。
如果是export LANG=en_US.UTF-8则是对环境变量赋值。

综上所述,设置环境变量还是要加export,好惨。

captcha