7

Не ясно, что он делает или что в нем содержится. Я попытался получить выходные данные set и env, чтобы увидеть, какие C или LANG установлены в других местах системы. Ничего не было ясно о том, как он используется или установлен. Я даже не знаю, с какой справочной страницы мне стоит начать читать.

Любая помощь здесь будет полезна, поскольку я пытаюсь декодировать сценарии запуска на разных машинах Linux. Если кто-то может порекомендовать хорошие ресурсы (книги, документация), которые помогут в этом процессе, это будет высоко ценится.

Пример сценариев, использующих LANG = C на машине centos6

$ grep -i LANG=C ./*
./halt:LANG=C __umount_loop '$2 ~ /^\/$|^\/proc|^\/dev/{next}
./netconsole:   route=$(LANG=C ip -o route get to $host/32)
./netconsole:           arp=$(LANG=C /sbin/arping -c 1 -I $DEV $target 2>/dev/null | awk '/ reply from .*[.*]/ { print gensub(".* reply from .* \\[(.*)\\].*","\\1","G") }')
./netconsole:                   SYSLOGADDR=$(LANG=C host $SYSLOGADDR 2>/dev/null | awk '/has address / { print $NF }')
./network:          LANG=C sed -e "$__sed_discard_ignored_files" \
./network:          LANG=C sort -k 1,1 -k 2n | \
./network:          LANG=C sed 's/ //')
./network:              eval $(LANG=C fgrep "DEVICE=" ifcfg-$i)
./network:              eval $(LANG=C fgrep "TYPE=" ifcfg-$i)
./network:              eval $(LANG=C fgrep "SLAVE=" ifcfg-$i)
./network:              if LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i > /dev/null ; then
./network:            if ! LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i >/dev/null 2>&1 ; then
./network:              eval $(LANG=C fgrep "DEVICE=" ifcfg-$i)
./network:              eval $(LANG=C fgrep "TYPE=" ifcfg-$i)
./rpcbind:# We can't Japanese on normal console at boot time, so force LANG=C.
./rpcbind:        LANG=C

Пример использования в скриптах на машине с Ubuntu 10.04

$ grep -i LANG=C ./*
./apache2:ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
./exim4:LANG=C
./ntop:export LANG=C\

3 ответа3

14

Это вынуждает приложения использовать язык по умолчанию для вывода, а сортировку - байтовой.

$ LANG=es_ES man
¿Qué página de manual desea?
$ LANG=C man
What manual page do you want?
$ LANG=en_US sort <<< $'a\nb\nA\nB'
a
A
b
B
$ LANG=C sort <<< $'a\nb\nA\nB'
A
B
a
b
6

Как уже объяснялось, переменная среды LANG управляет локализацией.

Это влияет на многие стандартные инструменты командной строки, такие как sort , grep , awk .

Установка его значения в "C" говорит всем этим инструментам учитывать только базовые символы ASCII и отключать многобайтовое совпадение UTF-8.

Еще одна хорошая причина , чем локализация использовать эту переменную окружения является выполнение: он может сделать grep 1000 раз быстрее для версий grep <2,7: http://rg03.wordpress.com/2009/09/09/gnu-grep-is-slow- на UTF-8/

О причине, по которой буква "C" используется для указания "безопасной" базовой локали, см. Почему «LANG = C»?(не D или E или F).

4

LANG = C - это способ отключить локализацию. Он используется в скриптах для прогнозирования вывода программы, который может варьироваться в зависимости от текущего языка. Для получения дополнительной информации прочитайте это

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .