如何在没有任何提示的情况下使用 Perl 脚本在 FreeBSD 中自动安装 Perl 包?

How to install Perl packages automatically in FreeBSD using a Perl script without any prompt?

我想使用 Perl 脚本自动安装 Perl 包。我使用的代码是

#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use CPAN;
eval "use JSON" 
    or do {
    CPAN::install("JSON");
};
eval "use Net::Address::IP::Local" 
    or do { 

    CPAN::install("Net::Address::IP::Local");
};
eval "use Net::OpenSSH" 
    or do { 

    CPAN::install("Net::OpenSSH");
};
eval "use Net::SCP::Expect" 
    or do { 

    CPAN::install("Net::SCP::Expect");
};

脚本运行过程中,会询问是或否、密码等提示,如何自动处理这些提示?我必须将它部署在许多服务器上,所以我必须将它自动化。

你为什么不使用 FreeBSD Ports Collection

如果您只需要默认值,请使用 pkg(8)

看起来可以简化为只安装几个预编译包:

pkg install -y p5-JSON p5-Net-Address-IPv4-Local p5-Net-OpenSSH p5-Net-SCP-Expect

如果您想更好地控制安装的软件,请使用ports(7)

如果你想配置这些包(比如打开附加功能、禁用文档安装等),那么你可以从端口自己构建它们:

cd /usr/ports/converters/p5-JSON && make install
cd /usr/ports/net/p5-Net-Address-IPv4-Local && make install
cd /usr/ports/net/p5-Net-OpenSSH && make install
cd /usr/ports/net/p5-Net-SCP-Expect && make install

有关详细信息,请参阅 FreeBSD Handbook(例如有关在您的计算机上获取端口树副本的说明)。

如果您只想要默认值,那么您可以像这样将 BATCH=YES 传递给 make:make BATCH=YES install.

如果您需要任何额外的软件包,或者您必须调整现有的软件包以超出官方端口中提供的软件包,那么您可以给自己一个 copy of the ports tree and and your own ports/modify existing ones to your liking. See the Porter's Handbook 以了解更多详细信息。

使用现有工具高效管理端口

端口通常是管理系统包的好方法。该框架易于使用和修改。您可能也有兴趣查看 available ports management tools.

我得到了一个解决方案,当在安装任何软件包之间出现提示时,无论是自动安装还是手动安装,提示都会在 15 秒后自动超时,并且进一步安装将照常继续。如果仅提示 "yes",我们也可以在管道 (|) 中给出 yes。