Создать новую локаль во FreeBSD

sedраствор:

sed -E 's/^(([0-9]+\.){3}[0-9]+).*(C:\\.+) *HAS NOT BEEN PATCHED.*/\1 - \3/' reportfile
3
04.11.2019, 15:17
1 ответ

Похоже, вы пробуете линуксизм на FreeBSD. Во FreeBSD вы должны использовать классы входа в систему

Отличное общее описание локалей содержится в Какой я должен установить свою локаль и каковы последствия этого? .

Часть этого ответа, которую вы можете игнорировать, называется «Установка локалей». FreeBSD поставляется со всеми установленными стандартными локалями. Вы можете проверить это с помощью

locale -a

Но затем вы , вероятно, утверждаете, что пытаетесь изменить локаль и установить ее. И это то, что я называю линуксизмом. Люди добавляют локаль в linux, не понимая, что на самом деле произошло, а затем устанавливают LC _ALL. Локаль определяет набор LC_*переменных. Затем LC_ALLиспользуется для их переопределения!

Во FreeBSD предпочтительным способом изменения настроек локали для пользователя (или системы )является использование 22.2.1.1. Метод классов входа в систему . Здесь вы также можете изменить общесистемные настройки по умолчанию.

LC _ALL следует устанавливать только в том случае, если вы хотите (принудительно )отменить любые другие настройки LC _*. Вы можете подумать, что устанавливаете «локаль» с помощью LC_ALL, но на самом деле вы просто устанавливаете LANGна LANG=en_DK.UTF-8. Это недопустимый язык, и вы должны оставить это на усмотрение проекта Unicode CLDR . Для получения дополнительной информации см. Что делает «LC _ALL=C»?

Тогда я думаю, что вы не хотите изобретать свой собственный новый язык. Но из комбинаций, которые вы выбираете, моя догадка заключается в том, что вы хотели бы, чтобы система вела себя как датская (DK )система, но говорила с вами по-английски. Для этого вы можете смешивать и сопоставлять переменные LC_*с содержанием заездов.

Пример:

LANG=en_US.UTF-8
LC_CTYPE="da_DK.UTF-8"
LC_COLLATE="da_DK.UTF-8"
LC_TIME="da_DK.UTF-8"
LC_NUMERIC="da_DK.UTF-8"
LC_MONETARY="da_DK.UTF-8"
LC_MESSAGES="en_US.UTF-8"

Если вы не хотите устанавливать свой класс входа (по какой-либо причине ), вам все равно следует придерживаться переменных, определенных CLDR.Это даст вам наиболее переносимые результаты :

.
$ LC_ALL=C LANG=en_US.UTF-8 LC_CTYPE=da_DK.UTF-8 LC_COLLATE=da_DK.UTF-8 LC_TIME=da_DK.UTF-8 LC_NUMERIC=da_DK.UTF-8 LC_MONETARY=da_DK.UTF-8 LC_MESSAGES=en_US.UTF-8 mosh xyz.example.org
/usr/local/bin/mosh: could not get canonical name for xyz.example.org: hostname nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
$

Если вы хотите часто использовать эту настройку локали, вы можете настроить ее с помощью класса входа в систему. Либо см. Справочник по FreeBSD, либо мой ответ на SSH для FreeBSD в UTF -8

Я думаю, что ваш ответ лежит где-то выше. Но если мы возьмем ваш вопрос дословно, то Текущая версия FreeBSD добавит локаль UTF -8 C в версии 13.0 (, см. коммит r340144 ). Если вы действительно действительно хотите увидеть, как добавить новую локаль , взгляните на введение C.UTF -8 локаль

ОБНОВЛЕНИЕ

Каталог /usr/share/locale/*— это просто каталог. Если вы сделаете дословную копию, как в Q -, все будет работать на FreeBSD 11.2. Я по-прежнему рекомендую использовать подробные LC_ALLили классы входа в систему. На данный момент я думаю, что проблема в "толстых пальцах" .

Каталог содержит символические ссылки и файлы определений. Файлы могут быть созданы с помощью localdef , который заменил mklocale в 2015 году .

Если вы не хотите изменять фактический порядок сопоставления, вы можете указать язык, который имеет «правильный» порядок сопоставления -, или просто скопировать файл. PATH_LOCALE=/usr/share/localeявляется неявным, так как используется по умолчанию.

Я сделал дословную копию своей системы в testи en_DK.UTF-8. Они сразу появляются с locale -a. Оба работали как положено:

$ locale -a | grep -e en_DK -e test
en_DK.UTF-8
test
$ LC_ALL=test mosh xyz.example.org
/usr/local/bin/mosh: could not get canonical name for xyz.example.org: hostname nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
$ LC_ALL=test /bin/sh
$ locale
LANG=
LC_CTYPE="test"
LC_COLLATE="test"
LC_TIME="test"
LC_NUMERIC="test"
LC_MONETARY="test"
LC_MESSAGES="test"
LC_ALL=test
$ exit
$ LC_ALL=en_DK.UTF-8 mosh xyz.example.org
/usr/local/bin/mosh: could not get canonical name for xyz.example.org: hostname nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
$ LC_ALL=dummy mosh xyz.example.org
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LC_ALL = "dummy",
        LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LC_ALL = "dummy",
        LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
/usr/local/bin/mosh: could not get canonical name for xyz.example.org: hostname nor servname provided, or not known
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).
$ uname -a
FreeBSD test 11.2-RELEASE FreeBSD 11.2-RELEASE #0 r335510: Fri Jun 22 04:32:14 UTC 2018     root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64
5
27.01.2020, 21:15

Теги

Похожие вопросы