我有這樣的事情:檢查文件是否存在,甚至在PATH
if(! -e $filename) {
# do something
}
,但我需要改變它,這樣它看起來甚至文件在我的道路。有沒有辦法在不分析PATH的情況下實現這一點?
我有這樣的事情:檢查文件是否存在,甚至在PATH
if(! -e $filename) {
# do something
}
,但我需要改變它,這樣它看起來甚至文件在我的道路。有沒有辦法在不分析PATH的情況下實現這一點?
當加載可執行文件時,系統使用PATH
變量。因此,要讓底層系統爲您完成工作,我相信您需要嘗試加載可執行文件。這聽起來不像是你想要做的。
很可能有一些庫會提供這樣的功能,但編寫自己的庫很簡單。你只需要使用split
然後迭代。
你怎麼能看到,如果一個文件在$ENV{PATH}
指定的目錄中不看$ENV{PATH}
? …這是一個修辭問題。
這是前段時間的short script I wrote。您應該能夠適應它爲您的需求:
#!/usr/bin/perl
use strict; use warnings;
use File::Basename;
use File::Spec::Functions qw(catfile path);
my $myname = fileparse $0;
die "Usage: $myname program_name\n" unless @ARGV;
my @path = path;
my @pathext = (q{});
if ($^O eq 'MSWin32') {
push @pathext, map { lc } split /;/, $ENV{PATHEXT};
}
PROGRAM: for my $progname (@ARGV) {
unless ($progname eq fileparse $progname) {
warn "Not processed: $progname\n\tArgument is not a plain file name\n";
next PROGRAM;
}
my @results;
for my $dir (@path) {
for my $ext (@pathext) {
my $f = catfile $dir, "$progname$ext";
push @results, $f if -x $f;
}
}
print "$progname:\n";
print "\t$_\n" for @results;
}
爲了補充daxim's和Sinan Ünür's有用的答案:
在有限的情況下,如果你只關心一個給定的程序是否是該系統的路徑,你可以採取快捷:
如果目標程序是一個CLI是有一個免費的副作用選項(不是生產標準輸出輸出等)導致程序很快順利退出 - 例如,--version
- 你可以做到以下幾點:
my $exe = 'bash'; # example
`$exe --version` || die "'$exe' not found.";
是否適用於文件工作,這是不可執行? –
␠␠␠␠␠␠␠␠␠␠␠␠ – daxim
這應該沒問題,因爲當涉及到'PATH'時,您會對其他文件感興趣。但都是一樣的,值得指出。 –