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

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

我怎样才能获得“详细”的退出代码,以便出现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

基本上,我希望下载错误退出时的代码与第一个错误不同。如果可能的话,我希望每个特定错误都有不同的退出代码,但上面的示例是我需要的最低要求。如何在没有其他软件(除了aptitude)的原始 Ubuntu 安装中做到这一点?

答案1

我相信这不是 XY 的情况,你只是希望能够调试 apt-get。在这样的假设下,以下是我的答案。

来自man apt.conf

调试选项

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

因此,您只需要激活每个调试行为的规则apt-get

  • 调试::pkgProblemResolver:启用有关 dist-upgrade、upgrade、install、remove、purge 所做决定的输出。
  • 调试::无锁定:禁用所有文件锁定。这可用于以非 root 用户身份运行某些操作(例如,apt-get -s install)。
  • 调试::pkgDPkgPM:每次 apt 调用 dpkg(1) 时打印出实际的命令行。

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

  • 调试::获取::http:打印使用 HTTP 下载包相关的信息。还有https,,ftpcdrom

手册页还有更多内容,您可以使用 轻松列出它们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是一个最新技术软件,因此它具有先进的方法来调试过程,而无需依赖退出代码。

答案2

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

相关内容