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

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

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

apt show $PACKAGE_NAME > pack_info.txt

但是,这不会创建pack_info.txt文件并且总是给出此警告:

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

暂时我尝试重定向STDOUTSTDERR使用&>,结果提供了pack_info.txt我们需要的文件。

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

dpkg -s $PACKAGE_NAME > pack_info.txt

好处是它既不显示警告也不显示错误。

糟糕的是,我们不想使用 dpkg,而只想将 apt 的 STDOUT 重定向到文件。

因此,我有三个问题要问:

  1. 我们所说的稳定的 CLI 接口到底是什么意思?
  2. 如何在脚本中安全且无错误地使用此类命令?[请举例说明]
  3. 有没有办法只将 STDOUT 重定向apt show到文件?

答案1

apt用于终端,输出漂亮的输出;而apt-getapt-cache用于脚本,输出稳定、可解析的输出。因此,您的命令的脚本等价apt show于:

apt-cache show $PACKAGE_NAME >pack_info.txt

现在逐一回答你的问题:

我们所说的稳定 CLI 接口到底是什么意思?

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

易于(8) 命令行被设计为最终用户工具,其行为可能会因版本不同而有所变化。虽然它试图不破坏向后兼容性,但如果更改似乎有利于交互使用,则也无法保证这一点。

所有功能易于(8)有专门的 APT 工具可用,例如apt-get(8)以及apt-缓存(8)同样。 易于(8)只是改变了一些选项的默认值(见apt.conf(5)特别是二进制范围)。因此,您应该优先在脚本中使用这些命令(可能启用一些附加选项),因为它们尽可能保持向后兼容性。


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

只需分别使用apt-getapt-cache代替普通的apt。:) 参见这个答案获得等价物列表。


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

您已经正确地完成了操作:>file或者1>file重定向 stdout、2>file重定向 stderr 以及&>file将两者都重定向到file

相关内容