我正在开发 Chromebook。由于Chrome OS基于Gentoo,因此开发者模式下可用的包管理系统是Portage。emerge
是用于安装软件包的命令,但它是一个非常复杂且难以理解的命令,并且我没有关于如何做我想做的事情的明确说明。
我希望能够做两件事:
- 列出已安装的软件包的名称。
- 列出可以安装的软件包的名称。
NAME
在这两种情况下,包的“名称”都是在命令中替换的确切字符串,emerge NAME
以便安装所述包。
我写了我认为第一个问题的解决方案,而第二个问题的解决方案并不是真正令人满意的。
这是我的用于列出已安装软件包的脚本(lipkgs
):
#!/bin/bash
cat /usr/local/var/lib/portage/world | sed "s/^.*\\///" | sort
这是我列出可用软件包的脚本 ( lapkgs
):
#!/bin/bash
cat /usr/local/portage/packages/Packages | grep "^CPV: " | sed "s/^CPV: .*\\///g" | sort
当我第一次写这篇文章时lapkgs
,我以为这/usr/local/portage/packages/Packages
是一种缓存文件,其中包含从设置为与 Portage 连接的任何存储库中可用的所有包。我的第一个问题是输出包含类似的名称xxd-1.10-r3
,这不是我输入要安装的名称xxd
,而是当前的包修订名称或其他名称;这个名称将在包与包之间变化,因此我无法编写任何通用程序来清理它们。我后来意识到的第二个问题是,其中的名称/usr/local/portage/packages/Packages
可能不是可用包的列表,而是某种已安装包以及虚拟包的列表。
我该如何做我想要实现的目标?