如何检测Perl中的OS名称到特定版本?

时间:2014-01-13 14:48:18

标签: linux perl unix solaris

我试图寻找一个如何做到这一点的答案,但我似乎无法找到答案。 我知道要在perl中找到操作系统名称,您可以使用

$^O 

然而,在Linux和Solaris中,无论您使用何种操作系统版本,它都将返回 Solaris Linux 。我希望它显示为 Solaris10 Solaris11 。有没有办法得到这个?我知道你输入

uname -r

您可以获取版本号(例如Solaris中的5.10)。 有关如何做到这一点的任何想法?

谢谢=)

2 个答案:

答案 0 :(得分:6)

perl中的POSIX模块提供了uname调用,因此:

use POSIX qw(uname);
my @uname = uname();
print $uname[0] . " " . $uname[2];

这提供了来自正在运行的系统的信息,而不是来自执行构建的系统的信息(这是Config结果来自的地方)。

一般来说,这个信息是kernel版本,而不是产品的营销版本,所以例如,这不会告诉你它是否是一个Linux Mint系统,只是它是一个Linux系统运行3.2.foo内核。

对于基于lsb的Linux系统,lsb_release命令可以提供此信息,例如:在Linux系统上我有:

natsu ~> lsb_release  -r
Release:    12.04
natsu ~> lsb_release  -i
Distributor ID: Ubuntu

此信息位于/etc/lsb-release文件中。

对于Solaris,版本信息位于/etc/release文件中。第一行包含操作系统的名称,例如Solaris 10 9/10。此文件中有多行,而且它更像是一个自由格式的文本字段。

答案 1 :(得分:4)

use Config;
print "$_\n" for @Config{qw(myuname osname osvers)};

来自perldoc Config

  

Config模块包含Perl构建时配置程序可用的所有信息。

     

<强> myuname

     

uname -a的输出(如果可用),否则为主机名。然后整个东西都是低壳的,斜线和单引号被移除。

     

<强> OSNAME

     

此变量包含操作系统名称(例如sunos,solaris,hpux等)。稍后它可用于设置默认值。任何空格都用下划线代替。如果我们无法解决它,它被设置为空字符串。

     

<强> osvers

     

此变量包含操作系统版本(例如4.1.3,5.2等)。它主要用于帮助选择适当的提示文件,但在其他地方设置默认值可能很有用。如果我们无法弄明白,它会被设置为''。我们会尽量保持要保留多少版本号,例如如果4.1.1,4.1.2和4.1.3对于这个包基本相同,那么提示文件可能只是os_4.0或os_4.1等,而不是为每个小版本保留单独的文件。