检测OS类型的Perl

我想用Perl来检测操作系统类型。

例如:

假设我有一个安装程序,为了知道安装程序需要运行哪些命令,我​​必须检测安装了哪个操作系统,例如“linux”。 可以说它是“linux”,现在是哪种类型的“linux”?

  • Fedora的
  • Ubuntu的
  • CentOS的
  • 的Debain
  • 等等
  • 我将如何做到这一点?


    另外,你可以使用Config(它是一个核心模块),这是一个例子:

    use Config;
    print "$Config{osname}n";
    print "$Config{archname}n";
    

    在我的Mac OS X上,它会打印:

    darwin
    darwin-2level
    

    根据perlvar的说法,无论是$OSNAME还是$^O都会为您提供操作系统。 这也等同于使用$Config{'osname'} (请参阅Config以获取更多信息)。 Windows系统的特别注意事项:

    在Windows平台中, $^O并不是很有帮助:因为它始终是MSWin32,它并不能区分95/98 / ME / NT / 2000 / XP / CE / .NET。 使用Win32::GetOSName()Win32::GetOSVersion() (请参阅Win32和perlport)来区分变体。

    为了获得一个Linux机器的确切平台,你需要使用一个像他的答案中提到的xaxes这样的模块。


    第一步是检查$^O变量的输出。

    如果输出是例子

    Linux的

    你需要更多的处理来检测使用哪个发行版。

    请参阅perldoc perlvar

    到目前为止,您可以运行lsb_release -a来查看使用哪个发行版。

    如果此命令不存在,则可以测试文件的存在性,如:

    /etc/debian_version # debian or debian based
    /etc/redhat-release # rpm like distro
    

    其他文件测试示例:http://www.novell.com/coolsolutions/feature/11251.html


    考虑使用Linux::Distribution模块检查发行版也使用xaxes解决方案。


    如果你想检测包管理器,你可以尝试这种方法:

     if ($^O eq "linux") {
         my $pm;
    
         do{
             if (-x qx(type -p $_ | tr -d "n")) {
                 $pm = $_;
                 last;
             }
         } for qw/apt-get aptitude yum emerge pacman urpmi zypper/;
    
         print $pm;
     }
    
    链接地址: http://www.djcxy.com/p/54585.html

    上一篇: Detect OS type perl

    下一篇: How to identify platform/compiler from preprocessor macros?