Чому рекомендується “LANG = C; sudo apt-get clean” тощо?


16

Я натрапив на цю сторінку вікі: Порядок усунення несправностей менеджера пакунків .

У ньому були такі команди, як:

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

То яка мета LANG=C;?



8
Зверніть увагу, що цей документ використовує команду неправильно - він повинен бути, LANG=C commandа не LANG=C;command. Перша форма примушує значення LANGзмінної середовища протягом тривалості, commandтоді як друга форма - це фактично дві команди, де перша частина просто встановлює локальну (не експортовану) змінну, а друга частина виконує команду без встановлення необхідної змінної середовища.
Guss

2
@Guss: Насправді це також працює з крапкою з комою. Чому? Оскільки LANG - це існуюча змінна середовище, коли ви відкриваєте вікно терміналу, і якщо ви зміните його значення в якості окремої команди, це значення буде ефективною змінною середовища, поки ви не зміните її знову або процес закінчиться.
Gunnar Hjalmarsson

3
@Gunnar - це неправильно: ймовірно, LANGзнаходиться в оточенні, тому, ймовірно, працює із зайвими крапками з комою; але це (1) зайве, тому що LANGміж командами нічого не зміниться . Також натякаючи на те, що хтось може запускати команди таким чином, є (2) помилковим через непотрібне та непрохане зміна середовища, і (3) це забезпечує неправильну схему для будь-якого неінформованого користувача, який пізніше повторно використовує використання, можливо, зі змінною оболонки, яка не знаходиться у оточення, і, таким чином, навіть не впливаючи на виконання команд, які вимагають його для правильної, можливо безпечної, функції.
FooF

2
@Braiam Я знайомий із синтаксисом, але важливо зазначити, що, якщо змінна не експортується, команда її не побачить. LANG - це стандартна змінна середовище, яка експортується за замовчуванням, але інших змінних може не бути, і ОП повинні знати про це.
Guss

Відповіді:


26

Якщо ви вирішите проблеми, ви, ймовірно, рано чи пізно опублікуєте свої результати на якомусь форумі або тут.

Коли це станеться, для інших користувачів набагато простіше зрозуміти ваші журнали та результати, якщо вони не будуть інтернаціоналізовані.

Так би мовити, якщо ви використовуєте французьку, китайську чи хінді чи будь-яку іншу мову в якості системи, то для виводу, ймовірно, будуть використовуватися терміни на цій мові, і це ускладнює розуміння того, що відбувається.

Локалізація C вимагає виводу за замовчуванням (як правило, це лише англійська мова ASCII).

Найкраще розпочати сеанс усунення несправностей із:

export LC_ALL=C

Замість встановлення певних змінних локалі або для встановлення лише для певної команди.


10

LANG=Cзмусить ваш вихідний термінал повернутися до локальної локалізації за замовчуванням. Оскільки в цьому посібнику запропоновано відправити свій вихід на Launchpad для підтримки, вони змушують вас це зробити так, що коли вставляєте його, інші зможуть прочитати його незалежно від мови, якою ви зазвичай користуєтесь.


3

Невелике доповнення, хоча воно, мабуть, не застосовується у випадку сприятливого, оскільки я вважаю це досить стабільним програмним забезпеченням:

Деякі програми не дуже поводяться, коли використовують інший параметр для LANG (або принаймні відрізняється від C або en_US).

У Unity були такі проблеми (і ігри, засновані на Unity), у Unreal Engine теж були деякі проблеми. Також деякі сценарії збірки для Android працювали лише з LANG = C належним чином або компілювались лише із цієї змінної середовища, встановленої таким чином.

Таким чином, це також може допомогти усунути неполадки, оскільки помилка може навіть не виникати при цьому налаштуваннях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.