LANG=C 存在于许多 /etc/init.d/* 脚本中。LANG=C 起什么作用?为什么需要设置 LANG=C?

LANG=C 存在于许多 /etc/init.d/* 脚本中。LANG=C 起什么作用?为什么需要设置 LANG=C?

它的作用和内容不清楚。我尝试 grep set 和 env 的输出,以查看系统上其他地方的 C 或 LANG 设置。它是如何被使用或设置的,却一无所知。我甚至不知道我应该从哪个手册页开始阅读。

当我尝试解码不同 Linux 机器上的启动脚本时,任何帮助都非常有用。如果有人能推荐一些有助于此过程的优质资源(书籍、文档),我将不胜感激。

在 centos6 机器上使用 LANG=C 的脚本示例

$ grep -i LANG=C ./*
./halt:LANG=C __umount_loop '$2 ~ /^\/$|^\/proc|^\/dev/{next}
./netconsole:路由=$(LANG=C ip -o 路由到达$host/32)
./netconsole:arp=$(LANG=C /sbin/arping -c 1 -I $DEV $target 2>/dev/null | awk'/回复来自.*[.*]/{print gensub(".*回复来自.* \\[(.*)\\].*","\\1","G")}')
./netconsole:SYSLOGADDR=$(LANG=C 主机 $SYSLOGADDR 2>/dev/null | awk'/has 地址 / { 打印 $NF }')
./网络:LANG=C sed -e “$__sed_discard_ignored_files” \
./网络:LANG=C 排序-k 1,1-k 2n|\
./网络:LANG=C sed's//')
./网络:eval $(LANG=C fgrep“DEVICE=”ifcfg-$i)
./网络:eval $(LANG=C fgrep“TYPE=”ifcfg-$i)
./网络:eval $(LANG=C fgrep“SLAVE=”ifcfg-$i)
./network: 如果 LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]!" ifcfg-$i > /dev/null ; 然后
./network: 如果 ! LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]!" ifcfg-$i >/dev/null 2>&1 ; 然后
./网络:eval $(LANG=C fgrep“DEVICE=”ifcfg-$i)
./网络:eval $(LANG=C fgrep“TYPE=”ifcfg-$i)
./rpcbind:# 我们无法在启动时在普通控制台上使用日语,因此强制 LANG=C。
./rpcbind: LANG=C

Ubuntu 10.04 机器上的脚本使用示例

$ grep -i LANG=C ./*
./apache2:ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
./exim4:LANG=C
./ntop:导出 LANG=C\

答案1

它强制应用程序使用默认语言进行输出,并强制按字节排序。

$ LANG=es_ES man
¿Qué página de manual desea?
$ LANG=C man
What manual page do you want?
$ LANG=en_US sort <<< $'a\nb\nA\nB'
a
A
b
B
$ LANG=C sort <<< $'a\nb\nA\nB'
A
B
a
b

答案2

正如前面所解释的,LANG环境变量控制本地化。

它影响许多标准命令行工具,如sort,,grepawk

将其值设置为“C”会告诉所有这些工具仅考虑基本 ASCII 字符并禁用 UTF-8 多字节匹配。

除了本地化之外,使用该环境变量的另一个很好的理由是性能:它可以使版本 <2.7 的grep速度提高 1000 倍:grephttp://rg03.wordpress.com/2009/09/09/gnu-grep-is-slow-on-utf-8/

关于为什么使用字母“C”来指定“安全”的基本语言环境,请参阅为什么是“LANG=C”?(而不是 D 或 E 或 F)

答案3

LANG=C 是一种禁用本地化的方法。它在脚本中用于预测程序输出,这些输出可能因当前语言而异。有关更多信息,请阅读

相关内容