GNU/Linux >> Znalost Linux >  >> Linux

Platné hodnoty pro LC_CTYPE?

Nedostal jsem se do podrobností o tom, kdo je "správný nebo špatný" - ale byl jsem tímto problémem stejně naštvaný. Některá řešení:

  • Na straně serveru:
    • změnit/zakázat AcceptEnv LC_* v /etc/ssh/sshd
      • nevýhody:nastaví je na výchozí systém
    • upravit .profile
      • nevýhody:jeden uživatel
    • upravit /etc/bash* nebo /etc/profile
      • nevýhody:mohou být v aktualizacích zrušeny
  • Na straně klienta:
    • alias ssh="LC_CTYPE=\"${LANG}\" ssh" v .bashrc /.profile /whereEver
      • nevýhody:jeden uživatel
    • stejné jako na straně serveru v .bashrc /.profile ...
    • změnit/přidat nastavení v Terminálu
      • con:celá relace, ať už místní nebo vzdálená

Nakonec jsem tedy vytvořil mac-locale-fix.sh v /etc/profile.d na serveru (v mém případě raspian) s tímto řádkem:

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

Doufám, že to pomůže ostatním...


Základní otázka zní

Moje primární otázka je, je to chyba v MacOS? Nebo se Linux mýlí, když trvá na tom, že proměnná musí být nastavena na plně specifikovaný název národního prostředí?

a stránka POSIX pro proměnné prostředí ukazuje důvod, proč ostatní považují konfiguraci macOS za nesprávnou:

[XSI] Pokud hodnota národního prostředí má tvar:

language[_territory][.codeset]

odkazuje na národní prostředí poskytované implementací, kde je nastavení jazyka, území a kódové sady definováno implementací .

LC_COLLATE , LC_CTYPE , LC_MESSAGES , LC_MONETARY , LC_NUMERIC a LC_TIME jsou definovány tak, aby akceptovaly další modifikátor pole @, který umožňuje uživateli vybrat konkrétní instanci lokalizačních dat v rámci jedné kategorie (například pro výběr slovníku na rozdíl od znakového řazení dat). Syntaxe těchto proměnných prostředí je tedy definována takto:

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

Pokud například uživatel chtěl pracovat se systémem ve francouzštině, ale potřeboval třídit německé textové soubory, LANG a LC_COLLATE by mohly být definovány jako:

LANG=Fr_FR
LC_COLLATE=De_DE

To by mohlo být rozšířeno o výběr slovníkového řazení (řekněme) pomocí pole modifikátoru @; například:

[email protected]

Implementace může podporovat jiné formáty.

Pokud implementace nerozpozná hodnotu národního prostředí, chování není specifikováno.

To znamená, že předpokládají, že POSIX předepisuje syntaxi pro nastavení národního prostředí. Neopatrný čtenář by předpokládal, že POSIX definuje přípustné formy pro proměnné prostředí, takže kódová sada hodnota je volitelná a nenahrazuje jazyk . Ale ten poslední „květen“ otevírá plechovku červů, což ve skutečnosti požehná tomuto rozdílu ve výkladu. Apple si může dělat, co chce, pokud chce poskytovat platná národní prostředí, která se přesně neřídí tímto vzorem.

@tripleee navrhl, že stránka na Locale poskytuje lepší informace, ale to je téměř výhradně diskuse o definicích národního prostředí, spíše než poskytování pokynů pro interoperabilitu (tj. zdánlivý cíl POSIX).

Žádná stránka neřeší rozdíly v dostupných nastaveních národního prostředí (jako je ".utf8" versus ".UTF-8"). Ty jsou závislé na implementaci, jak je uvedeno na stránce POSIX. To ponechává uživatelům jediné řešení, aby si sami určili, jaká nastavení národního prostředí jsou podporována na lokálních a vzdálených systémech, a (zde chování ssh) určili, jak je nastavit na vzdáleném systému "kompatibilně".


Linux
  1. Platný případ použití pro oprávnění „pouze spouštět“ soubor?

  2. Jak najít platné hodnoty pro termín k použití v Tmux?

  3. Jak smazat všechna nastavení pro Deja Dup?

  1. Seznam webových skriptovacích jazyků a nastavení pro Plesk

  2. Jak mohu spravovat nastavení aplikace FrontPage pro web?

  3. Povolte nastavení proxy pro příkaz Yum na CentOS 7

  1. Platná alternativa k vrcholu pro Openbsd?

  2. Jak hledat klíče nebo hodnoty v Dconf?

  3. Jak sledovat hodnoty cwnd a ssthresh pro připojení TCP?