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

kir*_*iri 15 apt

如何获得“详细”退出代码,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
Run Code Online (Sandbox Code Playgroud)

与这样的下载错误有不同的退出代码

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)
Run Code Online (Sandbox Code Playgroud)

目前,这两个错误都退出了 100

基本上,我希望下载错误以不同于第一个错误的代码退出。如果可能,我希望每个特定错误都有不同的退出代码,但上面的示例是我需要的最低限度。如何在没有其他软件的情况下在 vanilla Ubuntu 安装中执行此操作(除了aptitude)?

Bra*_*iam 16

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

来自man apt.conf

调试选项

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

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

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

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

  • Debug::Acquire::http:打印与使用 HTTP 下载包相关的信息。还有https, ftp, cdrom

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

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

Debug::*::*  "true";
Run Code Online (Sandbox Code Playgroud)

或者如果你想使用多行:

Debug {
  Acquire {
    http "true";
    ftp "true";
  };
  NoLocking "true";
};
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get -o Debug::pkgProblemResolver=true -o Debug::Acquire::http=true -f install 
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get -c debug-apt.conf install hello
Run Code Online (Sandbox Code Playgroud)

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


Jos*_*Jos 1

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