这个问题实际上是关于为什么错误消息。sources.list
在我看来,配置文件中的重复条目似乎很容易自动更正,并且可以相当容易地编写脚本。
根据安瓦尔的回答关于此错误消息的典型问题:
如果你的 sources.list 中有这样的一行
deb http://archive.ubuntu.com/ubuntu precise universe
那么它就不能有另一行像下面这样(你的文件有)
deb http://archive.ubuntu.com/ubuntu precise main universe
这似乎是一个相当容易解决的事情——将线分成标记并将两者合并。
然而,尽管在 Ask Ubuntu 上的多个帖子中都提到当人们尝试运行时确实会出现错误,但还是apt-get
明确地告诉用户。You may want to run apt-get update to correct these problems
apt-get update
那么,为什么不能自动解决这些问题有什么特别的原因吗apt-get
? 是否存在某种设计概念/推理,实际上希望手动修复此问题?
答案1
然而,尽管在 Ask Ubuntu 上的多个帖子中都提到当人们尝试运行时确实会出现错误,但还是
apt-get
明确地告诉用户。You may want to run apt-get update to correct these problems
apt-get update
但这不是唯一出现此错误的地方。大多数人确实倾向于apt-get update
在对源进行更改后运行,这完全没问题,但这也可能发生在其他 apt 操作中:
$ sudo vim /etc/apt/sources.list
[sudo] password for muru:
$ sudo apt install vim-gnome
Reading package lists... Done
Building dependency tree
Reading state information... Done
vim-gnome is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 328 not upgraded.
W: Duplicate sources.list entry http://jp.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages (/var/lib/apt/lists/jp.archive.ubuntu.com_ubuntu_dists_trusty_main_binary-amd64_Packages)
W: Duplicate sources.list entry http://jp.archive.ubuntu.com/ubuntu/ trusty/main i386 Packages (/var/lib/apt/lists/jp.archive.ubuntu.com_ubuntu_dists_trusty_main_binary-i386_Packages)
W: You may want to run apt-get update to correct these problems
这里的问题是这两个警告是独立产生的。
W: You may want to run apt-get update to correct these problems
在构建 apt 缓存时发生任何错误时都会打印。这是一个通用的解决方案:打印此代码的代码不知道(或关心)发生了哪个错误,但我认为,对于构建缓存时可能发生的大多数错误,获取新的软件包列表可能是解决方案,这是合理的。(想想我们看到的所有 apt 问题,因为有人运行了apt-get install
或apt-get upgrade
没有运行apt-get update
。)
但开发人员知道这不是一个好建议。请参阅apt-pkg/cachefile.cc
:
/* This sux, remove it someday */
if (_error->PendingError() == true)
_error->Warning(_("You may want to run apt-get update to correct these problems"));
(一如既往,补丁应该受到欢迎。)
那么 apt-get 不能自动解决这些问题有什么特殊原因吗?
因为,恕我直言,这是总是PEBCAK 的结果add-apt-repository
足够智能,不会添加重复的条目。因此,此错误总是当有人手动编辑源代码时就会发生这种情况。由于人类犯错误的可能性是无穷的,因此让其自动更正并不安全。