Perché si consiglia “LANG = C; sudo apt-get clean” ecc?


16

Mi sono imbattuto in questa pagina wiki: procedura di risoluzione dei problemi di Gestione pacchetti .

In esso c'erano comandi come:

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

Qual è lo scopo di LANG=C;?



8
Si noti che quel documento utilizza il comando in modo errato - dovrebbe essere LANG=C commande non LANG=C;command. La prima forma forza il valore della LANGvariabile d' ambiente per la durata commandmentre la seconda forma è in realtà due comandi in cui la prima parte imposta semplicemente una variabile locale (non esportata) e la seconda parte esegue il comando senza impostare la variabile d'ambiente richiesta.
Guss,

2
@Guss: attualmente funziona anche con il punto e virgola. Perché? Poiché LANG è una variabile di ambiente esistente quando si apre la finestra del terminale e se si modifica il suo valore come comando separato, tale valore sarà la variabile di ambiente effettiva fino a quando non la si modifica nuovamente o al termine del processo.
Gunnar Hjalmarsson,

3
@Gunnar - non è corretto: probabilmente si LANGtrova nell'ambiente, quindi probabilmente funziona con punti e virgola ridondanti; ma è (1) ridondante perché non cambierà nulla LANGtra i comandi. Anche suggerire a qualcuno di eseguire comandi in questo modo è (2) sbagliato a causa di un ambiente in cambiamento non necessario e indesiderato, e (3) questo fornisce un modello errato per qualsiasi utente non informato che successivamente riapplica l'uso - possibilmente con una variabile di shell che non è in l'ambiente e quindi non ha nemmeno alcun effetto sui comandi eseguiti che lo richiedono per una funzione corretta, forse sicura.
FooF,

2
@Braiam Ho familiarità con la sintassi, ma è importante notare che se la variabile non viene esportata, il comando non la vedrà. LANG è una variabile d'ambiente standard e quindi esportata di default - ma altre variabili potrebbero non esserlo e l'OP dovrebbe esserne consapevole.
Guss,

Risposte:


26

Se stai risolvendo i problemi, probabilmente pubblicherai i tuoi risultati in alcuni forum, o qui, prima o poi.

Quando ciò accade, è molto più semplice per gli altri utenti comprendere i log e l'output, se non sono internazionalizzati.

Vale a dire, se stai usando il francese o il cinese o l'hindi o qualsiasi altra cosa come lingua di sistema, è probabile che l'output utilizzi termini in quella lingua, e ciò rende ancora più difficile capire cosa sta succedendo.

La locale C forza l'output predefinito (che in genere è solo inglese ASCII).

È consigliabile avviare una sessione di risoluzione dei problemi con:

export LC_ALL=C

Invece di impostare variabili locali specifiche o impostarle solo per un comando specifico.


10

LANG=Crenderà l'output del terminale riprogrammato alla locale predefinita. Poiché questa guida ti suggerisce di inviare il tuo output a Launchpad per il supporto, ti stanno facendo in modo che, quando lo incolli, gli altri saranno in grado di leggerlo indipendentemente dalla lingua che usi abitualmente.


3

Una piccola aggiunta sebbene probabilmente non si applichi nel caso di apt poiché lo considero un software abbastanza stabile:

Alcuni programmi notoriamente si comportano in modo anomalo quando si utilizza un'impostazione diversa per LANG (o almeno diversa da C o en_US).

Unity aveva (ha ancora?) Questi problemi (e giochi basati su Unity), anche Unreal Engine aveva dei problemi. Inoltre, alcuni degli script di build per Android venivano eseguiti correttamente solo con LANG = C o compilati solo con questa variabile d'ambiente impostata in questo modo.

Pertanto, ciò potrebbe anche aiutare a risolvere i problemi poiché il bug potrebbe non verificarsi con questa impostazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.