我需要自动安装大量 Perl 模块。它们大多数都存在于 ports 中。但有些模块位于 bundles 中,例如www/p5-HTML-Tree
prvides HTML::Element
、HTML::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 文件。