Linux语言环境变量LANG设置后不生效

问题描述

在 Linux 系统中,`LANG` 环境变量用于设置默认的语言和区域(locale)信息。设置 `LANG=c` 通常会将语言设置为 C locale(即 POSIX locale),这意味着系统会使用英语,并且字符集设置为 ASCII。所以,设置LANG=C之后,是不是理所应当就该回显英文了。然而,哐哐打脸。

现在回想起来,这也是一个“会者不难,难者不会”的问题。一开始,以为是Linux操作系统版本兼容性问题,跟现场再三确认,人家版本很新~~得~~

那大概率是其他环境变量跟LANG冲突了,并且比LANG优先级高。(公司本地的服务器,为了避免中文乱码,各种糟心事,一般我都喜欢设置成英文的,所以没环境确认~~算不算自己给自己挖了个坑)

让现场用户执行locale命令查看本地化参数,如下:

可以看到LC_ALL=zh_CN.UTF-8一般情况下LC_ALL是空的(如下图),设置LANG会将其他的本地化语言变量一起修改掉。怀疑当LC_ALL有值的时候,LANG优先级低而失效。

验证过程

 

Linux下的环境变量可以设置在/etc/profile或 /etc/profile.d/*的文件(全局生效),也可以设置在~/.bash_profile(优先级高,只对当下用户有效)。

1、修改/etc/locale.conf ,设置LANG="en_US.UTF-8"

2、备份并修改~/.bash_profile,设置LC_ALL="zh_CN.UTF-8"

cp ~/.bash_profile{,_bak}
echo 'export LC_ALL="zh_CN.UTF-8"' >>~/.bash_profile 

3、重新登录系统,执行locale命令
LANG=en_US.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8
4、执行其他命令发现回显为“中文”,虽然LANG=en_US.UTF-8。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值