¿Por qué se recomienda "LANG = C; sudo apt-get clean", etc.?

16

Encontré esta página wiki: Procedimiento de solución de problemas del Administrador de paquetes .

En él, había 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

Entonces, ¿para qué sirve LANG=C;?

DK Bose
fuente
8
Tenga en cuenta que ese documento está utilizando el comando incorrectamente, debería serlo LANG=C commandy no LANG=C;command. La primera forma fuerza el valor de LANGla variable de entorno commandmientras que la segunda forma es en realidad dos comandos donde la primera parte solo establece una variable local (no exportada) y la segunda parte ejecuta el comando sin establecer la variable de entorno requerida.
Guss
2
@Guss: en realidad funciona también con punto y coma. ¿Por qué? Debido a que LANG es una variable de entorno existente cuando abre la ventana de terminal, y si cambia su valor como un comando separado, ese valor será la variable de entorno efectiva hasta que lo cambie nuevamente o el proceso finalice.
Gunnar Hjalmarsson
3
@Gunnar: es incorrecto: probablemente LANGesté en el entorno, por lo que probablemente funcione con punto y coma redundantes; pero es (1) redundante porque nada va a cambiar LANGentre los comandos. También insinuar que alguien ejecute comandos de esta manera es (2) incorrecto debido a un entorno de cambio innecesario y no invitado, y (3) esto proporciona un patrón incorrecto para cualquier usuario no informado que luego vuelve a aplicar el uso, posiblemente con una variable de shell que no está en el entorno y, por lo tanto, ni siquiera tiene ningún efecto en los comandos que se ejecutan que lo requieren para una función correcta, quizás segura
FooF
2
@Braiam Estoy familiarizado con la sintaxis, pero es importante tener en cuenta que a menos que se exporte la variable, el comando no la verá. LANG es una variable de entorno estándar y, por lo tanto, se exporta por defecto, pero otras variables pueden no serlo y el OP debe ser consciente de ello.
Guss

Respuestas:

26

Si está solucionando problemas, es probable que publique sus resultados en algún foro, o aquí, tarde o temprano.

Cuando eso sucede, es mucho más simple para otros usuarios comprender sus registros y resultados, si no están internacionalizados.

Es decir, si usa francés, chino o hindi o lo que sea como idioma de su sistema, es probable que la salida use términos en ese idioma, y ​​eso hace que sea aún más difícil entender lo que está sucediendo.

La configuración regional de C fuerza la salida predeterminada (que generalmente es inglés solo ASCII).

Es mejor comenzar una sesión de solución de problemas con:

export LC_ALL=C

En lugar de establecer variables locales específicas, o configurarlo solo para un comando específico.

muru
fuente
10

LANG=Chará que la salida de su terminal retroceda a la configuración regional predeterminada. Como esta guía sugiere que envíe su salida a Launchpad para obtener asistencia, le piden que haga esto para que, cuando lo pegue, otros puedan leerlo sin importar el idioma que use habitualmente.


fuente
3

Una pequeña adición, aunque probablemente no se aplique en el caso de apt, ya que lo considero un software bastante estable:

Algunos programas se comportan notoriamente mal cuando usan una configuración diferente para LANG (o al menos diferente de C o en_US).

Unity tenía (¿todavía tiene?) Estos problemas (y juegos basados ​​en Unity), Unreal Engine también tuvo algunos problemas. Además, algunos de los scripts de compilación para Android solo se ejecutaban correctamente con LANG = C o solo se compilaban con esta variable de entorno configurada de esta manera.

Por lo tanto, esto también podría ayudar a solucionar problemas, ya que el error podría no ocurrir incluso con esta configuración.

larkey
fuente