【发布时间】:2019-04-11 09:36:07
【问题描述】:
如何检查一个端口是否已经安装在 FreeBSD 上?
这将在用于配置的 shell 脚本中使用。即如果端口已经安装跳过安装,否则调用make 命令
【问题讨论】:
标签: freebsd
如何检查一个端口是否已经安装在 FreeBSD 上?
这将在用于配置的 shell 脚本中使用。即如果端口已经安装跳过安装,否则调用make 命令
【问题讨论】:
标签: freebsd
在 FreeBSD 10+ 下,您可以使用“pkg”。好的参考是:https://wiki.freebsd.org/PkgPrimer
如果你的port被安装了,会导致:
# pkg info apache-jmeter
apache-jmeter-3.0.r2
Name : apache-jmeter
Version : 3.0.r2
Installed on : Thu May 5 18:58:45 2016 MSK
Origin : www/jmeter
Architecture : freebsd:10:x86:64
...
否则:
# pkg info jmeter
pkg: No package(s) matching jmeter
【讨论】:
pkg info 在找到或未找到端口时给出正确的退出代码。这意味着不需要解析返回的字符串来检查它是否已安装,而是可以简单地写成布尔值:if ! pkg info mysql56-server ; then # install mysql logic here... fi
您不应该在您通过以下方式安装的软件上使用“pkg delete”/“pkg remove” 端口,而是从端口树内部“进行卸载”。执行“pkg 安装” 将预编译的软件包下载到您的系统并安装它。 执行“pkg info”将*不会告诉您它是否是从端口安装的。
恐怕引用的陈述不正确。
“端口”只是一个尚未编译和安装的“包”。 已安装的端口实际上是包,无论它是通过 pkg(8) 下载预编译和安装,还是从端口树本地编译然后安装,都可以像任何其他包一样对待。一旦“安装”了软件,术语“端口”和“包”就是同义词。
pkg delete/remove <portname> 可以并且应该使用并且可能更可取,因为它会提示卸载不再需要的依赖项。
特定端口目录中的make deinstall 只会卸载该端口,不会卸载其他任何内容。
pkg infopkg info <portname>是正确答案。
【讨论】: