如何获得“详细的” apt-get退出代码?


12

我如何获得“冗长的”退出代码,apt-get以便出现这样的错误

Package google-chrome is a virtual package provided by:
  google-chrome-stable 29.0.1547.76-r223446
  google-chrome-beta 30.0.1599.47-1
You should explicitly select one to install.

E: Package 'google-chrome' has no installation candidate

退出代码不同于下载错误,例如这样

Err http://dl.google.com/linux/chrome/deb/ stable/main google-chrome-stable amd64 29.0.1547.76-r223446
  Something wicked happened resolving 'dl.google.com:http' (-11 - System error)

目前,两个错误均以 100

基本上,我想用与第一个错误不同的代码退出下载错误。如果可能的话,我希望每个特定的错误都具有不同的退出代码,但是上面的示例是我所需要的最小值。我如何在没有附加软件的原始Ubuntu安装中执行此操作(除外aptitude)?


您可以将apt-get命令包装在解析输出的脚本中。还是算作“其他软件”?另外,要检测下载错误,请考虑apt-get --download-only先进行。
乔斯(Jos)

嗯,那很有意义。也许您可以首先通过执行操作来验证包X的存在apt-cache policy X
2013年

同样,您将需要grep输出。我认为这样做apt-cache policy google-chrome不会给您加上“候选人”一词,apt-cache policy google-chrome-stable反而会。
2013年

好。我正在将此讨论移至聊天,并将此建议作为(部分)答案输入。
2013年

Answers:


1

这不是一个完整的答案,但是您可以首先通过做apt-cache policy X和grepping输出“候选(无)”或“找不到包X”等来测试是否存在包。


目前支持,但正如您所说,这只是部分内容。随时删除您在答案中的所有评论。感谢您的帮助
kiri

15

我相信这不是XY的情况,而且一般来说,您只想能够调试apt-get。在这种假设下,这就是我的答案。

来自man apt.conf

调试选项

在Debug ::部分中启用选项将导致调试信息通过apt库发送到程序的标准错误流,或启用对调试apt行为主要有用的特殊程序模式。

因此,您只需要为以下每种调试行为激活规则apt-get

  • Debug :: pkgProblemResolver:启用有关dist升级,升级,安装,删除,清除的决策的输出。
  • Debug :: NoLocking:禁用所有文件锁定。这可以用于以非root用户身份运行某些操作(例如apt-get -s install)。
  • Debug :: pkgDPkgPM:每次apt调用dpkg(1)时,都会打印出实际的命令行。

那3是手册页推荐的第一个,并且第一个将帮助您调试显示的第一个错误。对于第二个,您可能需要:

  • Debug :: Acquire :: http:打印与使用HTTP下载软件包有关的信息。还有httpsftpcdrom

手册页还有更多内容,您可以使用轻松列出它们man apt.conf | grep -A5 -i debug

所有这些都应使用正确的语法编写并且它们都是布尔值:

Debug::*::*  "true";

或者如果您想使用多行:

Debug {
  Acquire {
    http "true";
    ftp "true";
  };
  NoLocking "true";
};

如果只想为apt-get实例运行,则可以使用-o/ --option开关:

sudo apt-get -o Debug::pkgProblemResolver=true -o Debug::Acquire::http=true -f install 

另一种方法是创建您的个性化配置文件,并使用-c/ --config-file开关加载它:

sudo apt-get -c debug-apt.conf install hello

关于更改退出代码,除非您更改源代码,否则我相信您不能。apt-get最先进的软件,因此它具有高级方法来调试过程,而无需依赖退出代码。


我实际上正在尝试将这些命令放在可以无人值守运行的脚本中。我将如何在bash脚本中使用它来查找是否发生了第一个错误?
kiri 2013年

我也只想针对的特定实例执行此操作apt-get,而不是一直都这样做。
kiri 2013年

@ minerz029,您可以使用该-o选项运行临时命令。更新了我的答案。
Braiam 2013年

关于第一个评论,您应该在解析输出时做一些聪明的事情。我不知道如何才能做到。
Braiam

apt-cache policy PACKAGE正如乔斯所说,我实际上使它与grep的输出配合使用。我试图检查软件包是否可安装,但我可能没有问正确的问题,但这是一个不错的答案
kiri
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.