检测OS类型的Perl
我想用Perl来检测操作系统类型。
例如:
假设我有一个安装程序,为了知道安装程序需要运行哪些命令,我必须检测安装了哪个操作系统,例如“linux”。 可以说它是“linux”,现在是哪种类型的“linux”?
我将如何做到这一点?
另外,你可以使用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?