SolarisでLC_ALLを設定すると、どのような影響がありますか?

SolarisでLC_ALLを設定すると、どのような影響がありますか?

/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設定する必要があります。CPOSIX

変更を実装する場所については、/etc/default/initさらに、各プロセスのデフォルトのロケールを設定するファイルを編集する方が良い方法です。 shkshbashzsh

関連情報