如何在Perl中检测操作系统名称及其特定版本?

3

我试图找到如何完成这个任务的答案,但似乎找不到。 我知道在perl中可以使用以下方法查找操作系统名称:

$^O 

然而在Linux和Solaris中,无论您使用何种操作系统版本,它都只会返回SolarisLinux。我希望它能显示为Solaris10Solaris11。有没有办法做到这一点?我知道如果您输入:

uname -r

你可以获取版本号(例如在Solaris中为5.10)。你有什么想法吗?如何实现?
谢谢 =)
2个回答

7
在 Perl 中,POSIX 模块提供了 uname 调用,因此:
use POSIX qw(uname);
my @uname = uname();
print $uname[0] . " " . $uname[2];

这提供了来自运行系统的信息,而不是构建系统(其中Config结果来自)的信息。
一般来说,这些信息是内核版本,而不是产品的营销版本。例如,这不会告诉你它是否是Linux Mint系统,只会告诉你它是运行3.2.foo内核的Linux系统。
对于基于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。此文件有多行内容,是一个自由格式文本字段。


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

来自perldoc Config

Config模块包含了在Perl构建时Configure程序所提供的所有信息。

myuname

如果可用,则为uname -a的输出,否则为主机名。整个字符串都被转换为小写,并删除斜杠和单引号。

osname

此变量包含操作系统名称(例如sunos,solaris,hpux等)。稍后设置默认值可能会有用。任何空格都将替换为下划线。如果我们无法确定它,则设置为空字符串。

osvers

此变量包含操作系统版本(例如4.1.3,5.2等)。它主要用于帮助选择适当的hints文件,但在其他地方设置默认值也可能有用。如果我们无法确定它,则设置为''。我们尝试灵活处理要保留多少版本号,例如,如果对于该软件包而言4.1.1、4.1.2和4.1.3本质上是相同的,则hints文件可能只是os_4.0或os_4.1等,而不是为每个小版本都保留单独的文件。


6
请注意评论:Config 模块包含在 Perl 构建时间 可供 Configure 程序使用的所有信息。这不是运行时的信息,而是构建时的信息。 - Anya Shenanigans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接