LC_CTYPEの有効な値は何ですか?

LC_CTYPEの有効な値は何ですか?

localeMacユーザーがSSHを介してLinuxシステムにログインすると、エラーについて不平を言い、誤ったLC_CTYPE=UTF-8設定について不平を言うさまざまなフォーラムで多くの質問が見つかりました。

LC_*もう少し詳しく説明すると、MacOSのシェルはこの値を設定しているように見え、SSH経由でログインすると(端末などでオプションを有効にした場合)、ローカル変数がリモートシステムにエクスポートされます。

LC_CTYPELinuxは有効なロケールに設定する必要があると主張localegenしますが(時々Linuxシステムの管理者としてこれを変更することができます)、UTF-8当初はロケールではありません。

私のもの基本的な問題は、これがMacOSのバグですか?それとも、変数が完全に指定されたロケール名に設定されるべきであると主張するLinuxは間違っていますか?

第二に、どちらが正しいのか、そしてその理由は何であるかを議論できるように、これはどこに記載されていますか?

第三に、Macユーザー(自分自身を含む)が異なるようにすることができるか、別のものを必要とするものがありますか?

確実な解決策は、次のようなものを配置することです。

LC_CTYPE=en_US.UTF-8

ただし、これは明らかに個人アカウントの問題のみを解決し、.bash_profile他の設定と一致する場合と一致しない可能性がある値をハードコードするだけです。locale

答え1

私は誰が「正しいと誰が正しいか」について詳細に説明していませんが、その問題のために同じように迷惑になりました。これに対するいくつかの解決策は次のとおりです。

  • サービス端末:
    • 変更/AcceptEnv LC_*無効/etc/ssh/sshd
      • 短所:システムのデフォルトに設定されます。
    • 編集する.profile
      • 欠点:シングルユーザー
    • 編集/etc/bash*する/etc/profile
      • 欠点:アップデートに戻すことができる
  • 顧客:
    • alias ssh="LC_CTYPE=\"${LANG}\" ssh".bashrc//.profileどこでも
      • 欠点:シングルユーザー
    • .bashrc/.profileのサーバー側と同じ...
    • 端末で設定変更/追加
      • 欠点:ローカルでもリモートでもフルセッション

だから私はついにサーバーにmac-locale-fix.sh次の行を作成しました/etc/profile.d(私の場合はraspian)。

[ "A${LC_CTYPE}" == "AUTF-8" ] && export LC_CTYPE="${LANG}"

これが他の人に役立つことを願っています...

答え2

基本的な質問は

私の主な質問は、これがMacOSのバグですか?それとも、変数が完全に指定されたロケール名に設定されるべきであると主張するLinuxは間違っていますか?

そしてPOSIX環境変数ページは、他の人がmacOSが誤って設定されていると思う理由を示しています。

[XSI]もしロケール値の形式は次のとおりです。

language[_territory][.codeset]

言語、地域、およびコードセットの設定を含む実装で提供されるロケールを表します。実装定義

LC_COLLATELC_CTYPELC_MESSAGESLC_MONETARYLC_NUMERICLC_TIME@修飾子を使用して追加のフィールドを許可するように定義されています。これにより、ユーザーは単一のカテゴリ内でローカライズされたデータの特定のインスタンスを選択できます(たとえば、文字タイプのデータではなく事前選択)。これらの環境変数の構文は次のように定義されます。

[language[_territory][.codeset][@modifier]]

たとえば、ユーザーがフランス語でシステムと対話したいがドイツ語のテキストファイルをソートする必要がある場合は、LANGとLC_COLLATEを次のように定義できます。

LANG=Fr_FR
LC_COLLATE=De_DE

たとえば、@修飾子フィールドを使用して事前照合選択に拡張できます。

LC_COLLATE=De_DE@dict

実装は他の形式をサポートすることもできます。

実装がロケール値を認識しない場合、動作は指定されません。

つまり、POSIX がロケール設定構文を指定すると仮定します。一般の読者は、POSIX が許容される環境変数の形式を定義すると考えることができます。コードセット値はオプションであり、置き換えることはできません。言語。しかし、最後の「おそらく」はワームの缶を開き、実際に解釈の違いを祝福します。 Appleがこのパターンに正確に従わない有効なロケールを提供したい場合は、必要なものは何でもできます。

@tripleeeがこのページを推薦しました。ロケールより良い情報を提供しますが、これはガイダンスを提供するのではなく、ほぼ完全にロケール定義に関する議論です。相互運用性(つまり、POSIXの表面積の目標です)。

どちらのページも、使用可能なロケール(たとえば、「.utf8」と「.UTF-8」)の違いには対応していません。 POSIXページに記載されているように、これは実装によって異なります。これにより、ユーザーはローカルおよびリモートシステムでサポートされているロケールと(ここではsshの動作)、リモートシステムでこれらの設定を「互換性のある」設定にする方法を自分で決定できる唯一のソリューションを残します。

関連情報