Perl에서 운영 체제를 어떻게 감지합니까?
Mac, Windows 및 Ubuntu에 Perl이 있습니다. 스크립트 내에서 어떤 것이 무엇인지 어떻게 알 수 있습니까? 미리 감사드립니다.
편집 : 내가 무엇을하는지 물었다. 크로스 플랫폼 빌드 시스템의 일부인 스크립트입니다. 스크립트는 디렉토리를 반복하고 빌드 할 파일을 파악합니다. 일부 파일은 플랫폼별로 다르기 때문에 Linux에서는 _win.cpp 등으로 끝나는 파일을 빌드하고 싶지 않습니다.
$^O
운영 체제의 이름을 포함 할 변수를 조사하십시오 .
print "$^O\n";
linux
Linux 및 MSWin32
Windows 에서 인쇄 됩니다 .
영어 모듈 $OSNAME
을 사용하는 경우 이름으로이 변수를 참조 할 수도 있습니다 .
use English qw' -no_match_vars ';
print "$OSNAME\n";
에 따르면 perlport , $^O
될 것입니다 darwin
맥 OS X에서
동일한 정보 (및 더 많은 정보)를 제공 할 수 있는 Config 코어 모듈을 사용할 수도 있습니다 .
use Config;
print "$Config{osname}\n";
print "$Config{archname}\n";
내 Ubuntu 컴퓨터에서 다음을 인쇄합니다.
linux
i486-linux-gnu-thread-multi
이 정보는 Perl이 빌드 된 시스템을 기반으로하며 , Perl이 현재 실행되고있는 시스템 일 필요는 없습니다 ( $^O
및에 대해서도 동일 함 $OSNAME
). OS는 다를 수 없지만 아키텍처 이름과 같은 일부 정보는 다를 수 있습니다.
Windows에 대한보다 구체적인 정보가 필요한 경우 도움이 될 수 있습니다.
my $osname = $^O;
if( $osname eq 'MSWin32' ){{
eval { require Win32; } or last;
$osname = Win32::GetOSName();
# work around for historical reasons
$osname = 'WinXP' if $osname =~ /^WinXP/;
}}
원래 버전을 작성한 sysinfo.t 에서 파생되었습니다 .
더 자세한 정보가 필요한 경우 :
my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();
Sys :: Info :: OS 는 비교적 깨끗한 잠재적 솔루션처럼 보이지만 현재 Mac을 지원하지 않는 것 같습니다. 그러나 그것을 추가하는 것은 너무 많은 작업이어서는 안됩니다.
File::Spec
운영 체제에 따라 올바른 대리자를로드하는 방법을 보려면 소스 내부를 살펴보십시오 . :)
File::Spec
각 OS에 대해 별도의 Perl 모듈 파일이 있습니다. File::Spec::Win32
, File::Spec::OS2
등 ...
운영 체제를 확인하고 .pm
OS에 따라 런타임에 적절한 파일을 로드합니다 .
# From the source code of File::Spec
my %module = (
MSWin32 => 'Win32',
os2 => 'OS2',
VMS => 'VMS',
NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP.
cygwin => 'Cygwin',
amigaos => 'AmigaOS');
my $module = $module{$^O} || 'Unix';
require "File/Spec/$module.pm";
our @ISA = ("File::Spec::$module");
변수 $ ^ O (즉, 0이 아닌 대문자 'O')는 운영 체제의 이름을 보유합니다.
당신이 원하는 것에 따라, 그것은 당신이 원하는 답을 줄 수도 있고 아닐 수도 있습니다. 제 시스템에서는 어떤 배포판을 말하지 않고 'linux'를 제공합니다. Windows 또는 MacOS에서 무엇을 말하는지 잘 모르겠습니다.
Here's a quick reference on how to find the OS the local machine is running from Perl.
The $^O variable ($OSTYPE if you use English) contains the operating system that your perl binary was built for.
A classic one-liner:
my $windows=($^O=~/Win/)?1:0;# Are we running on windows?
#Assign the $home_directory variable the path of the user's home directory
my $home_directory = ($^O eq /Win/) ? $ENV{HOMEPATH} : $ENV{HOME};
#Then you can read/write to files in the home directory
open(FILE, ">$home_directory/my_tmp_file");
print FILE "This is a test\n";
close FILE;
#And/or read the contents of the file
open(FILE, "<$home_directory/my_tmp_file");
while (<FILE>){
print $_;
}
close FILE;
For a generic mapping in a pre-packaged perl module, check out Perl::OSType
.
It's used by Module::Build
.
yes using Config module can be a good thing. One more possibility is getting the info from /etc/*release files
for eg..
cat /etc/os-release
NAME="UBUNTU"
VERSION="12.0.2 LTS, Precise Pangolin"
ID="UBUNTU"
ID_LIKE=debian
PRETTY_NAME="Ubuntu precise (12.0.2 LTS)"
VERSION_ID="12.04"
ReferenceURL : https://stackoverflow.com/questions/334686/how-can-i-detect-the-operating-system-in-perl
'program tip' 카테고리의 다른 글
Pycharm의 모든 파일에서 단어를 찾는 방법 (0) | 2021.01.07 |
---|---|
객체 확산에서 노드 v6 실패 (0) | 2021.01.07 |
유형 접미사를 사용하지 않고 소수점이있는 숫자를 소수점 유형에 직접 할당 할 수없는 이유는 무엇입니까? (0) | 2021.01.07 |
Tortoise SVN으로 폴더의 저장소 변경 (0) | 2021.01.07 |
Java 용 힙 분석 도구에 대한 권장 사항? (0) | 2021.01.07 |