为什么推荐“ LANG = C; sudo apt-get clean”等?


16

我碰到了这个Wiki页面:Package Manager故障排除过程

其中包含以下命令:

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而第二种形式实际上是两个命令,其中第一部分仅设置局部变量(未导出),第二部分运行该命令而不设置所需的环境变量。
古斯

2
@Guss:实际上,它也适用于分号。为什么?因为当您打开终端窗口时LANG是一个现有的环境变量,并且如果您将其值作为单独的命令进行更改,则该值将是有效的环境变量,直到您再次对其进行更改或过程结束为止。
Gunnar Hjalmarsson

3
@Gunnar-不正确:可能LANG在环境中,因此它可能与多余的分号一起使用;但这是(1)多余的,因为LANG命令之间什么都不会改变。还暗示有人以这种方式运行命令是(2)由于不必要和不受欢迎的环境更改而导致的错误,并且(3)这为任何不知情的用户提供了不正确的模式,后来用户重新应用该用法-可能是由于shell变量不在环境,因此甚至不会对要求其提供正确(也许是安全)功能的命令的运行产生任何影响。
FooF,2016年

2
@Braiam我熟悉语法,但是需要注意的是,除非导出变量,否则该命令将看不到它。LANG是标准环境变量,因此默认情况下会导出-但其他变量可能不是,并且OP应该意识到这一点。
古斯

Answers:


26

如果要进行故障排除,您可能迟早会在​​某个论坛或此处发布结果。

发生这种情况时,如果其他用户未进行国际化,则使他们更容易理解您的日志和输出。

就是说,如果您使用法语,中文或印地语或其他语言作为系统语言,则输出可能会使用该语言的术语,这将使理解情况变得更加困难。

C语言环境强制使用默认输出(通常是仅ASCII的英语)。

最好使用以下方法启动故障排除会话:

export LC_ALL=C

而不是设置特定的语言环境变量,或者仅针对特定命令进行设置。


10

LANG=C将使您的终端输出回退到默认语言环境。正如本指南建议您将输出发送到Launchpad以获得支持一样,他们正在这样做,以便您将其粘贴时,无论您通常使用哪种语言,其他人都可以阅读。


3

很小的增加,尽管它可能不适用于apt,因为我认为它是相当稳定的软件:

当对LANG使用不同的设置时(或至少与C或en_US不同),某些程序的行为异常。

Unity有(仍然有?)这些问题(以及基于Unity的游戏),虚幻引擎也有一些问题。另外,某些Android的构建脚本只能在LANG = C下正常运行,或者仅使用这种设置的环境变量进行编译。

因此,这也可能有助于排除故障,因为使用此设置甚至可能不会出现该错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.