Comment puis-je détecter le système d'exploitation en Perl?
J'ai Perl sur Mac, Windows et Ubuntu. Comment puis-je dire à partir du script qui est qui? Merci à l'avance.
Edit: m'a demandé ce que je fais. C'est un script qui fait partie de notre croix-plate-forme de construction du système. Le script parcourt les répertoires et les chiffres quels fichiers à construire. Certains fichiers sont spécifiques à la plateforme, et donc, sur Linux, je ne veux pas construire les fichiers se terminant par _win.cpp, etc.
- Pourquoi avez-vous besoin de savoir? [Il y a peut-être plus approprié de répondre à votre question, en fonction de ce que (le cas échéant) c'est que vous faites c'est de la plate-forme de personne à charge.]
Vous devez vous connecter pour publier un commentaire.
Examiner les
$^O
variable qui contiendra le nom du système d'exploitation:Qui imprime
linux
sur Linux etMSWin32
sur Windows.Vous pouvez aussi vous référer à cette variable par le nom
$OSNAME
si vous utilisez le Anglais module:Selon perlport,
$^O
seradarwin
sur Mac OS X.Vous pouvez également utiliser le Config module de base, qui peuvent fournir les mêmes informations (et beaucoup plus):
Qui sur ma machine Ubuntu imprime:
Noter que cette information est basée sur le système que Perl a été construit, ce qui n'est pas nécessairement le système de Perl est actuellement en cours d'exécution sur (la même chose est vraie pour
$^O
et$OSNAME
); le système d'exploitation ne pourrait pas être différent, mais certaines informations, comme le nom de l'architecture, peut très bien être.STDOUT_TOP0
comme sortie, assurez-vous que vous utilisez$^O
au lieu de$^0
. Je ne peux pas vous dire comment je le sais, mais faites-moi confiance...Si vous avez besoin de plus d'informations spécifiques sur Windows, cela peut aider.
Dérivé de sysinfo.t, dont j'ai écrit la version originale.
Si vous avez besoin d'informations plus détaillées:
Sys::Info::OS ressemble à une relativement propre potentiel de la solution, mais pour l'instant, ne semble pas pour le support de Mac. Il ne devrait pas être trop de travail pour ajouter que si.
Regarder à l'intérieur de la source pour
File::Spec
pour voir comment il charge le droit délégué basé sur le système d'exploitation. 🙂File::Spec
dispose d'un module Perl fichier pour chaque OS.File::Spec::Win32
,File::Spec::OS2
, etc...Il vérifie le système d'exploitation et les appropriée
.pm
fichier lors de l'exécution basé sur les OS.La variable $^O (c'est un grand "O", pas un zéro) contient le nom du système d'exploitation.
Selon ce que vous voulez, il peut ou peut ne pas donner la réponse que vous voulez sur mon système, il donne "linux", sans dire lesquels distro. Je ne suis pas si sûr de ce qu'il dit sur Windows ou MacOS.
Voici une référence rapide sur la façon de trouver le système d'exploitation de la machine locale est en cours d'exécution à partir de Perl.
Un classique one-liner:
Pour un générique de la cartographie dans un pré-emballés module perl, découvrez
Perl::OSType
.Il est utilisé par
Module::Build
.oui à l'aide de Config du module peut être une bonne chose. Une possibilité est d'obtenir les informations à partir de /etc/*libération des fichiers
pour eg..
cat /etc/os-release
s21.postimg.org/ymuhihbsn/win32_os_info_perl.jpg><br> pour plus d'info abot module Win32 : <br/><search.cpan.org/~jdb/Win32-0.47/Win32.pm>
/etc/os-release
et vous ne savez pas à l'avance sur la plate-forme.msinfo32
sur cmd.exe ou de rediriger la s/p de fichiermsinfo32 /nfo C:\TEMP\windows_info.nfo
my ( $osvername, $major, $minor, $build, $id ) = Win32::GetOSVersion();
print "\n\nOS version - $osvername\nMajor # - $major\nMinor # - $minor\nBuild - $build\nID - $id \n\n";