如何快速检查Linux是否使用Perl安装了unzip?

如何快速检查是否使用Perl安装了Linux unzip

Solutions Collecting From Web of "如何快速检查Linux是否使用Perl安装了unzip?"

只要运行它。

认真。

据推测,你想知道它是否被安装,是因为你需要稍后运行。 在这种情况下,仅仅知道它是否被安装是不够的 – 无论如何,您还需要知道它是否可执行,是否在路径中,脚本是否正在运行,是否具有运行所需的特权它等等。 你可以通过简单的运行来检查所有的东西。

 `which unzip` 

如果有输出,则指向解压缩的位置。 如果没有输出,则不会显示。 这取决于你的路径上的解压缩。

这将验证unzip命令是否在您的路径上,以及是否可以由当前用户执行。

 print "unzip installed" if grep { -x "$_/unzip"}split /:/,$ENV{PATH} 

取自modulee :: Install :: Can:

 sub can_run { my ($self, $cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { next if $dir eq ''; my $abs = File::Spec->catfile($dir, $_[1]); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } 

然后:

 my $is_it_there = can_run("unzip"); 

我只是使用Archive :: Extract并将其配置为更喜欢Perl模块的二进制文件。 如果unzip在那里,它使用它。 否则,它会回到纯粹的Perl。

 perl -e 'if (-e "/usr/bin/unzip") { print "present\n"; } else { print "not present\n"; }' 

任何特定的unzip ? 我使用的Linux系统有Info-Zip的unzip ,如果这是你想要检查的,你可以做

 if ( (`unzip`)[0] =~ /^UnZip/ ) { # ... } 

如果你想让这个更安全些,你可以这样做:

 #!/usr/bin/perl -T use strict; use warnings; $ENV{PATH} = '/bin:/usr/bin:/usr/local/bin'; use File::Spec::Functions qw( catfile path ); my @unzip_paths; for my $dir ( path ) { my $fn = catfile $dir, 'unzip'; push @unzip_paths, $fn if -e $fn; } if ( @unzip_paths > 1 ) { # further narrow down by version etc } 

另请参阅我的多脚本 。

也许你应该退后一步,问你为什么需要Perl的unzip命令。 是因为你想解压一些东西吗? 如果是这样,那么你应该考虑用可用的许多模块之一来编程,例如Archive :: Zip 。

你为什么要在使用Perl时调用系统命令? 使用诸如Archive :: Extract之类的解压缩模块(或CPAN中的其他模块)

File::Which

你可以试试这个脚本(测试)。 它利用了哪个命令。

 #!/usr/bin/perl -w use strict; my $bin = "unzip"; my $search = `which $bin 2>&1`; chomp($search); if ($search =~ /^which: no/) { print "Could not locate '" . $bin . "'\n"; exit(1); } else { print "Found " . $bin . " in " . $search . "\n"; exit(0); } 

干杯,

布拉德