/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