apt 给出“不稳定的 CLI 界面”警告

C0d*_*lus 138 package-management command-line apt

我正在编写一个脚本,该脚本需要读取包含我为其编写此行的包信息的文件

apt show $PACKAGE_NAME > pack_info.txt
Run Code Online (Sandbox Code Playgroud)

但是,这不会创建pack_info.txt文件并始终发出此警告:

警告:apt 没有稳定的 CLI 界面。在脚本中谨慎使用。

暂时我尝试重定向STDOUT& STDERRusing&>并且它提供了pack_info.txt我们需要的文件。

我也尝试从中获取内容dpkg,这也有效:

dpkg -s $PACKAGE_NAME > pack_info.txt
Run Code Online (Sandbox Code Playgroud)

它既不显示警告也不显示错误有什么好处。

我们不想使用 dpkg 而只希望 apt 的 STDOUT 重定向到文件有什么不好的。

所以,我有三个问题要问:

  1. 我们所说的稳定 CLI 界面究竟是什么意思?
  2. 如何在脚本中安全无误地使用这些命令?【请注意举例说明】
  3. 有没有办法只将 STDOUT 重定向apt show到文件?

des*_*ert 190

apt对于终端并给出了漂亮的输出,而apt-getapt-cache是脚本,并给予稳定的,可分析输出。apt show因此,与您的命令等效的脚本是:

apt-cache show $PACKAGE_NAME >pack_info.txt
Run Code Online (Sandbox Code Playgroud)

现在来一一回答大家的问题:

稳定的 CLI 界面究竟是什么意思?

apt的输出在脚本中不能很好地使用。例如,apt install(与 相比apt-get install)显示一个对脚本无用的进度条,并且在解析输出时可能会引发错误。apt show firefox显示附加记录的提示,这在脚本中也是完全无用的,您希望它简单地输出那里的每条记录——这就是apt-cache show firefox它的作用。让我们看看man apt对此有什么看法:

所述易于(8)的命令行被设计为最终用户工具也可能改变的版本之间的行为。虽然它试图不破坏向后兼容性,但如果更改似乎对交互式使用有益,则也不能保证。

apt (8) 的所有功能都可以在专用的 APT 工具中使用,例如apt-get (8) 和apt-cache (8)。 apt (8) 只是改变了一些选项的默认值(参见apt.conf (5),特别是 Binary 范围)。因此,您应该更喜欢在脚本中使用这些命令(可能启用一些附加选项),因为它们尽可能地保持向后兼容性。


如何在脚本中安全无误地使用这些命令?

只需分别使用apt-getorapt-cache代替 plain apt。:) 请参阅此答案以获取等效项列表。


有没有办法只将 apt show 的 STDOUT 重定向到文件?

您已经正确地做到了:>file1>file重定向标准输出,2>file重定向标准错误&>file并将两者都重定向到file.