Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何检查Perl的可用性、版本以及所需模块的存在?_Bash_Perl_Perl Module - Fatal编程技术网

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脚本,我只想给每个人, 为此,我计划编写一个bash脚本,用于测试用户的环境,并确定该环境是否能够运行Perl脚本

我想测试以下内容:

  • Perl是否已安装在该系统中
  • Perl应具有5或更高版本
  • 模块JSON::Any是否可用

  • 任何关于检查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
    vs
    nawk
    gawk
    troff
    vs
    groff
    ;等等)

    如果您想测试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