如何从 FreeBSD 中的端口自动安装 Perl 模块?

如何从 FreeBSD 中的端口自动安装 Perl 模块?

我需要自动安装大量 Perl 模块。它们大多数都存在于 ports 中。但有些模块位于 bundles 中,例如www/p5-HTML-Treeprvides HTML::ElementHTML::TreeBuilder等。

理想情况下,它应该是一个命令行实用程序,其语法如下:

install_from_ports CGI CGI::FormBuilder HTML::TreeBuilder ...

你有什么建议吗?

答案1

这是一个经过简单测试的解决方案:

#!/bin/sh

# Build a regex to match all the .pm files
_regex=""
for arg in $*; do
    arg=`echo ${arg} | sed -e 's|::|/|g'`
    if [ "X${regex}X" != "XX" ]; then
        regex="${regex}|"
    fi
    regex="${regex}(${arg})"
done
regex="%%SITE_PERL%%/(${regex}).pm"

# Find the .pm files and derive the port names from them, then install using portinstall.
find /usr/ports -type f -name pkg-plist -path '*/p5-*' -exec egrep -l $regex {} + | sort -u | sed -e 's|/usr/ports/||' -e 's|/pkg-plist||' | xargs portinstall

现在,这将无法检测到没有 pkg​​-plist 的端口安装的模块,但这些端口非常少见。在我的系统上,4188 个 p5-* 端口中只有 58 个没有 pkg​​-plist 文件。

相关内容