Pourquoi «LANG = C; sudo apt-get clean», etc. est-il recommandé?

16

Je suis tombé sur cette page wiki: Procédure de dépannage du gestionnaire de packages .

Il y avait des commandes telles que:

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

Alors, quel est le but de LANG=C;?

DK Bose
la source
8
Veuillez noter que ce document utilise la commande de manière incorrecte - elle devrait l'être LANG=C commandet non LANG=C;command. Le premier formulaire force la valeur de LANGla variable d'environnement pendant la durée commandtandis que le second formulaire est en fait deux commandes où la première partie définit simplement une variable locale (non exportée) et la seconde partie exécute la commande sans définir la variable d'environnement requise.
Guss
2
@Guss: En fait, cela fonctionne aussi avec le point-virgule. Pourquoi? Parce que LANG est une variable d'environnement existante lorsque vous ouvrez la fenêtre de terminal et si vous modifiez sa valeur en tant que commande distincte, cette valeur sera la variable d'environnement effective jusqu'à ce que vous la modifiiez à nouveau ou que le processus se termine.
Gunnar Hjalmarsson
3
@Gunnar - il est incorrect: se trouve probablement LANGdans l'environnement, donc il fonctionne probablement avec des points-virgules redondants; mais il est (1) redondant car rien ne va changer LANGentre les commandes. Faire également allusion à quelqu'un pour exécuter des commandes de cette manière est (2) erroné en raison d'un environnement changeant inutilement et sans invitation, et (3) cela fournit un modèle incorrect pour tout utilisateur non informé qui réapplique plus tard l'utilisation - éventuellement avec une variable shell qui n'est pas dans l'environnement et donc même sans effet sur les commandes exécutées qui le nécessitent pour une fonction correcte, peut-être sûre.
FooF
2
@Braiam Je connais la syntaxe, mais il est important de noter qu'à moins que la variable ne soit exportée, la commande ne la verra pas. LANG est une variable d'environnement standard et donc exportée par défaut - mais d'autres variables peuvent ne pas l'être et l'OP doit en être conscient.
Guss

Réponses:

26

Si vous dépannez, vous publierez probablement vos résultats sur un forum, ou ici, tôt ou tard.

Lorsque cela se produit, il est beaucoup plus simple pour les autres utilisateurs de comprendre vos journaux et vos sorties, s'ils ne sont pas internationalisés.

C'est-à-dire que si vous utilisez le français, le chinois ou l'hindi ou quoi que ce soit comme langue système, la sortie est susceptible d'utiliser des termes dans cette langue, ce qui rend d'autant plus difficile la compréhension de ce qui se passe.

Les paramètres régionaux C forcent la sortie par défaut (qui est généralement en anglais uniquement ASCII).

Il est préférable de démarrer une session de dépannage avec:

export LC_ALL=C

Au lieu de définir des variables locales spécifiques ou de les définir uniquement pour une commande spécifique.

muru
la source
10

LANG=Crendra la sortie de votre terminal aux paramètres régionaux par défaut. Comme ce guide vous suggère d'envoyer votre sortie à Launchpad pour assistance, ils vous demandent de le faire pour que, lorsque vous la collez, les autres puissent la lire, quelle que soit la langue que vous utilisez habituellement.


la source
3

Un petit ajout bien qu'il ne s'applique probablement pas dans le cas d'apt car je le considère comme un logiciel assez stable:

Certains programmes se comportent notoirement mal lorsqu'ils utilisent un paramètre différent pour LANG (ou au moins différent de C ou en_US).

Unity avait (a toujours?) Ces problèmes (et les jeux basés sur Unity), Unreal Engine avait aussi quelques problèmes. De plus, certains des scripts de construction pour Android ne fonctionnaient correctement qu'avec LANG = C ou n'étaient compilés qu'avec cette variable d'environnement définie de cette façon.

Ainsi, cela pourrait également aider à résoudre les problèmes car le bogue pourrait même ne pas se produire avec ce paramètre.

larkey
la source