Bash 如何检查Perl的可用性、版本以及所需模块的存在?
我写了一个Perl脚本,我只想给每个人, 为此,我计划编写一个bash脚本,用于测试用户的环境,并确定该环境是否能够运行Perl脚本 我想测试以下内容:Bash 如何检查Perl的可用性、版本以及所需模块的存在?,bash,perl,perl-module,Bash,Perl,Perl Module,我写了一个Perl脚本,我只想给每个人, 为此,我计划编写一个bash脚本,用于测试用户的环境,并确定该环境是否能够运行Perl脚本 我想测试以下内容: Perl是否已安装在该系统中 Perl应具有5或更高版本 模块JSON::Any是否可用 任何关于检查Perl可用性的建议都将不胜感激:-)最简单的方法是检查命令Perl-v的返回代码(退出代码),如果这不是0,您就没有Perl 现在,关于Perl需求,您应该从Perl脚本内部处理它们: #!/usr/bin/env perl use 5.00
任何关于检查Perl可用性的建议都将不胜感激:-)最简单的方法是检查命令
Perl-v
的返回代码(退出代码),如果这不是0
,您就没有Perl
现在,关于Perl需求,您应该从Perl脚本内部处理它们:
#!/usr/bin/env perl
use 5.006_001;
use ModuleName 2.0;
上述Perl代码将仅在Perl5.6.1或更高版本以及modele“ModuleName”2.0或更高版本下运行不需要从bash手动检查Perl版本,直接从Perl脚本检查更好更容易。
参考资料:
${PERL:-PERL}
”和类似的结构来识别命令(用于awk
vsnawk
或gawk
;troff
vsgroff
;等等)
如果您想测试JSON::Any的版本,请捕获命令的输出。
如果要测试Perl的版本,请添加“
use 5.008009代码>'或任何您认为合理的数字。(不久前,他们最终从一个正在工作的NFS挂载文件系统中删除了Perl 4,但这并不是机器上唯一的Perl,至少在过去十年或更长时间内是如此!)不,不要编写shell脚本。Perl已经有了一种非常好的方法来实现这一点。正确的方法是使用普通的工具链构建一个CPAN就绪的发行版。其中一些在和中进行了解释
作为一个简单的工作示例,创建一个目录布局,如下所示:
.
├── Build.PL
├── README
└── script
└── abuscript.pl
在Build.PL
文件中,放入:
use 5.000;
use Module::Build qw();
Module::Build->new(
module_name => 'abuscript',
dist_version => '1.000',
dist_author => 'abubacker <abubacker@example.com>',
dist_abstract => 'describe what the script does in one sentence',
configure_requires => {
'perl' => '5.000',
},
requires => {
'JSON::Any' => 0,
},
)->create_build_script;
完成所有这些后,您可以运行:
perl Build.PL
./Build manifest
./Build dist
这将产生一个.tar.gz
存档,您将分发该存档。告诉您的用户像安装任何其他CPAN模块一样安装它,或者如果他们不知道这意味着什么,他们应该阅读自述
如果您有时间,我建议您将脚本转换为模块。程序(Perl附带)和CPAN模块可以帮助您
如果许可证允许,可以将您的代码上载到CPAN,以使您的用户更加方便。首先在以下任何地方寻求帮助:邮件列表、web论坛、IRC频道#磁铁上的工具链(irc://irc.perl.org/toolchain)我不想打印更多细节,我只想知道版本号,当我发出perl-v命令时,任何建议使用使用5.006_001
检查perl本身的版本号。perl-v只检查perl二进制文件是否可以执行(=>检查是否安装了perl),您可以忽略它打印的所有内容,只关心执行的返回值。您的答案排除了“perl not found”响应的自动化(perl缺失,或者更可能的是,不在路径上)。诚然,我使用的每个系统都由系统安装了Perl——但提问者担心“Perl到底在哪里?”“……你应该从Perl脚本内部处理它们……”——如果没有Perl脚本怎么办。在我的例子中,有一个Bash脚本正在检查先决条件,它需要检查是否存在Perl模块。没有可用的Perl脚本。我更喜欢Perl-MJSON::Any-e12>/dev/null
-打印版本并将其发送到bit有什么意义吗bucket@justintime:如我所说,如果要检查JSON::Any的版本,捕获输出-这使我不用解释如何作为一个单独的练习来获取版本。根据CPAN标准,如果我有自己的.pm文件,我应该在Build.PL和文件结构中将其添加到哪里?而且,如果我有多个Perl脚本,比如说'script1.pl'和'script2.pl',我如何将其添加到Build.pl中?模块名称=>'script1.pl,script2.pl',?我找不到这方面的示例。示例:如果您有一个包声明为Fus::Roh::Da
的主模块,请将其重命名为Da.pm
,并将其移动到lib/Fus/Roh/Da.pm
。在Build.PL
中,指定。只需将两个脚本放入子目录script
,其余脚本将在安装时自动运行您可以通过运行perl Build.PL--install_base/tmp;来测试构建文件/构建安装并在/tmp
目录中检查结果。运行/Build distclean
并手动删除已安装的文件以重新开始。好的,我照你说的做了。我的剧本现在在哪里?我希望将它复制到/usr/bin的某个地方,将名称从script.pl更改为script,并添加可执行权限。我得到的是一个空目录/usr/lib/perl5/site\u perl/auto/TerminalHero
。顺便说一句,Build可以温和地询问root密码,而不是大喊大叫!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!错误:无法创建“/usr/lib/perl5/site\u perl/auto/TerminalHero”没有对“/usr/lib/perl5/site\u perl/auto/TerminalHero”的写入权限代码>最后一步必须是sudo./Build-install
或功能类似的步骤Build
可以请求root密码,但这将禁止无人参与的安装,而这一步骤只是其中的一小部分;在这种情况下还添加了喊叫,因为否则它会在屏幕上滚动而不被注意。-您可以配置cpan
()和cpanm
()以使用sudo
,然后安装发行版
To install this module, run the following commands:
perl Build.PL
./Build install
perl Build.PL
./Build manifest
./Build dist