Por que é recomendado "LANG = C; sudo apt-get clean" etc?

16

Me deparei com esta página wiki: Procedimento de solução de problemas do Gerenciador de Pacotes .

Nele, havia comandos como:

LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get --fix-missing update -o APT::Cache-Limit=100000000
LANG=C;sudo apt-get update -o APT::Cache-Limit=100000000 && sudo apt-get dist-upgrade

Então, qual é o propósito LANG=C;?

DK Bose
fonte
8
Observe que esse documento está usando o comando incorretamente - deveria estar LANG=C commande não LANG=C;command. O primeiro formulário força o valor da LANGvariável de ambiente durante o período em que commando segundo formulário é na verdade dois comandos em que a primeira parte apenas define uma variável local (não exportada) e a segunda parte executa o comando sem definir a variável de ambiente necessária.
Guss
2
@ Guss: Na verdade, ele também funciona com ponto e vírgula. Por quê? Como LANG é uma variável de ambiente existente quando você abre a janela do terminal e se você alterar seu valor como um comando separado, esse valor será a variável de ambiente efetiva até você alterá-la novamente ou o processo terminar.
Gunnar Hjalmarsson
3
@ Gunnar - está incorreto: provavelmente LANGestá no ambiente, portanto provavelmente funciona com ponto e vírgula redundante; mas é (1) redundante porque nada vai mudar LANGentre os comandos. Também sugerir que alguém execute comandos dessa maneira está (2) errado por causa de um ambiente de mudança desnecessário e não convidado, e (3) isso fornece um padrão incorreto para qualquer usuário desinformado que reaplicar posteriormente o uso - possivelmente com uma variável de shell que não esteja em o ambiente e, portanto, nem mesmo tendo qualquer efeito sobre os comandos executados que exijam a função correta, talvez segura.
FooF 27/01
2
@ Braiam Estou familiarizado com a sintaxe, mas é importante observar que, a menos que a variável seja exportada, o comando não a verá. LANG é uma variável de ambiente padrão e, portanto, exportada por padrão - mas outras variáveis ​​podem não ser e o OP deve estar ciente disso.
Guss 27/01

Respostas:

26

Se você estiver solucionando problemas, provavelmente postará seus resultados em algum fórum ou aqui, mais cedo ou mais tarde.

Quando isso acontece, é muito mais simples para outros usuários entenderem seus logs e resultados, se não forem internacionalizados.

Ou seja, se você estiver usando francês, chinês ou hindi ou qualquer outro idioma do sistema, é provável que a saída use termos nesse idioma, e isso torna ainda mais difícil entender o que está acontecendo.

O código do idioma C força a saída padrão (que geralmente é em inglês somente ASCII).

É melhor iniciar uma sessão de solução de problemas com:

export LC_ALL=C

Em vez de definir variáveis ​​de código de idioma específicas ou defini-lo apenas para um comando específico.

muru
fonte
10

LANG=Cfará com que a saída do terminal retorne ao código do idioma padrão. Como este guia sugere que você envie sua saída para o Launchpad para suporte, eles solicitam que você faça isso para que, quando você o cole, outros possam lê-lo, independentemente do idioma que você costuma usar.


fonte
3

Uma pequena adição, embora provavelmente não se aplique no caso do apt, pois o considero um software bastante estável:

Alguns programas notoriamente se comportam mal ao usar uma configuração diferente para LANG (ou pelo menos diferente de C ou en_US).

O Unity teve (ainda tem?) Esses problemas (e jogos baseados no Unity), o Unreal Engine também teve alguns problemas. Além disso, alguns scripts de construção para Android foram executados apenas com LANG = C corretamente ou compilados apenas com essa variável de ambiente configurada dessa maneira.

Portanto, isso também pode ajudar na solução de problemas, pois o bug pode nem ocorrer com essa configuração.

Larkey
fonte