LANG = C está em vários dos scripts /etc/init.d/*. O que faz LANG = C e por que você precisa definir LANG = C.

8

Não está claro o que ele faz ou o que contém. Eu tentei greping a saída de set e env para ver o que C ou LANG estão definidos em outros lugares nos sistemas. Nada foi claro sobre como é usado ou definido. Eu nem sei qual página de manual eu deveria começar a ler.

Qualquer ajuda aqui seria ótima ao tentar decodificar os scripts de inicialização em diferentes máquinas Linux. Se alguém pode recomendar um bom recurso (livros, documentação) que ajudaria ao longo deste processo que seria muito apreciado.

Exemplo de scripts usando LANG = C em uma máquina 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

Exemplo de uso de scripts em uma máquina 10.04 do Ubuntu

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

3 respostas

14

Ele força os aplicativos a usar o idioma padrão para a saída e força a classificação a ser feita no sentido contrário.

$ 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
    
por 12.09.2011 / 22:47
7

Como já explicamos, a variável de ambiente LANG controla a localização.

Ela afeta muitas ferramentas de linha de comando padrão, como sort , grep , awk .

Definir seu valor como "C" diz a todas essas ferramentas para considerar apenas caracteres ASCII básicos e desabilitar a combinação de vários bytes UTF-8.

Outro bom motivo do que a localização para usar essa variável de ambiente é o desempenho: pode tornar grep 1000 vezes mais rápido para grep versões < 2.7: link

Sobre o motivo pelo qual a letra "C" é usada para especificar uma localidade básica "segura", consulte Por que" LANG = C "? (não D ou E ou F) .

    
por 17.09.2013 / 18:19
4

LANG = C é uma maneira de desativar a localização. É usado em scripts para prever a saída do programa, que pode variar de acordo com o idioma atual. Para mais informações, leia this

    
por 12.09.2011 / 22:45