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 重定向到文件有什么不好的。
所以,我有三个问题要问:
apt show到文件?des*_*ert 190
apt对于终端并给出了漂亮的输出,而apt-get和apt-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 重定向到文件?
您已经正确地做到了:>file或1>file重定向标准输出,2>file重定向标准错误&>file并将两者都重定向到file.