![在 Solaris 上设置 LC_ALL 有何影响](https://linux22.com/image/45801/%E5%9C%A8%20Solaris%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%20LC_ALL%20%E6%9C%89%E4%BD%95%E5%BD%B1%E5%93%8D.png)
为了支持我们刚刚安装的应用程序,我被要求将此命令添加到/etc/profile
Solaris 10 UNIX 服务器上的文件中:
LC_ALL=en_US.UTF-8; export LC_ALL
其效果是更改服务器上的“区域设置”,当前尚未定义(默认为“C”)。
我的问题:我有什么理由不应该进行此更改吗?
作为替代方案,我可以想象编写一个脚本来导出该变量,运行应用程序,然后再次“取消设置”它。我不介意这样做,但我真的不太了解做出这样的改变的影响。
我还了解到可以对/etc/default/init
文件进行相同的更改。这会是一个更好的解决方案吗?
答案1
LC_ALL
胜过所有其他环境设置。我强烈建议不要在系统范围内设置此设置,因为这意味着任何想要使用不同设置的应用程序或用户必须首先取消设置LC_ALL
。
相反,如果一个应用程序需要特定的区域设置,请通过包装器脚本运行它。
#!/bin/sh
LC_ALL=en_US.UTF-8 exec /path/to/application "$@"
答案2
UTF-8
是比语言环境更好的选择POSIX
,实际上现在是默认的 Solaris 11 代码集。
我不认为使用它会出现任何问题,因为它与ASCII
.
至于en_US
,会有细微的差异,例如字符顺序或日期显示方式,如这些命令中所示:
$ export LC_ALL=C
$ date
Wed Aug 28 01:21:55 CEST 2013
$ printf "a\nb\nA\nB\nC\n" | sort
A
B
C
a
b
$ LC_ALL=en_US.UTF-8
$ date
Wednesday, August 28, 2013 01:21:58 AM CEST
$ printf "a\nb\nA\nB\nC\n" | sort
a
A
b
B
C
这不会影响系统软件,因为当然支持所有提供的区域设置。
确实需要严格POSIX
行为的应用程序应设置LC_ALL
为C
或POSIX
。
至于在哪里实施更改,更好的方法是编辑文件,该/etc/default/init
文件将设置每个进程的默认区域设置,而不仅仅是sh
、ksh
和。 bash
zsh