前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redhat6中获取LANG值为空

Redhat6中获取LANG值为空

作者头像
河边一枝柳
发布2021-08-06 15:21:40
4K0
发布2021-08-06 15:21:40
举报
文章被收录于专栏:一个程序员的修炼之路

问题描述

首先来描述一下我遇到的问题:如下图所示在我们产品中,服务脚本放置在目录/etc/init.d中,在用命令 "service xxx start" 后,脚本中启动应用程序ice_main,ice_main进程中使用命令 "locale" 来获取当前所使用的语言。但是获取的LANG的值为空......

问题追踪

首先,在安装了产品的Redhat5上查看是否存在同样的问题(检查是否是前辈遗留的历史问题),结果能够正常的获取LANG的值;初步说明代码在获取当前所使用的语言的方法没有问题;

然后,在Redhat6,shell命令行里输入 "locale" , 查看结果LANG的值并不为空:

[plain] view plaincopy

1. [root@rhel6_64_khm /]# locale

2. LANG=en_US.UTF-8

3. LC_CTYPE="en_US.UTF-8"

4. LC_NUMERIC="en_US.UTF-8"

5. LC_TIME="en_US.UTF-8"

6. LC_COLLATE="en_US.UTF-8"

7. LC_MONETARY="en_US.UTF-8"

8. LC_MESSAGES="en_US.UTF-8"

9. LC_PAPER="en_US.UTF-8"

10.LC_NAME="en_US.UTF-8"

11.LC_ADDRESS="en_US.UTF-8"

12.LC_TELEPHONE="en_US.UTF-8"

13.LC_MEASUREMENT="en_US.UTF-8"

14.LC_IDENTIFICATION="en_US.UTF-8"

15.LC_ALL=

这样问题就更加奇怪了,在我默认的知识里,shell相当于是这一系列进程的父进程,子进程应该继承父进程的环境变量。

接着,就开始进行代码审查,查看ice_main代码中是否对Redhat6平台进行了特殊处理,或者在代码中是否对环境变量进行了重新设置,结果是没有。那LANG到底在哪一步被更改了呢? 最后,当你没有任何进展的时候,就应该采用最笨的方式,从头到尾仔细检查每一个步骤。我开始从进程的源头查看,首先我们使用了命令 "service xxx start" ,这一个命令包含了三个步骤:Shell创建子进程执行service 脚本 (/sbin/service),service 脚本执行进程创建子进程执行xxx脚本,那么既然在shell中能够获取LANG的值并且不为空,那么让我们来看一下Redhat6中的/sbin/service脚本,果不其然,最后调用如下命令去执行xxx脚本:

[plain] view plaincopy

1. env -i PATH="{SERVICEDIR}/{SERVICE}"

既然看不懂env命令,那咱么就来man一下(man env):

[plain] view plaincopy

1. -i, --ignore-environment

2. start with an empty environment

对,问题就在这里,参数 "-i" 让其子进程采用空的环境变量。

那我们再一起来看看Redhat5中的/sbin/service脚本,可以看到其中虽然使用了参数'-i',但随后还是将本进程LANG的值传递给子进程,所以产品在Redhat5中执行时,可以获取非空的LANG:

[plain] view plaincopy

1. env -i LANG="TERM" "{SERVICE}"

问题解决

这个问题解决思路也比较简单,我个人有两个建议:

1. 采用命令行 "/etc/init.d/xxx" 来调用执行脚本

2. 从文件 "/etc/sysconfig/i18n" 中读取LANG的值

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个程序员的修炼之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档