Почему существует эта проверка, возвращающая разные результаты для pwd по сравнению с другими примерами?Что здесь происходит?
[me@unixbox1:~/perltests]> cat testopensimple.pl
#!/usr/bin/perl
use strict;
use warnings;
# |<command> for writing
# <command>| for reading
testopen("| pwd");
testopen("pwd |");
testopen("| hostname");
testopen("| cd");
testopen("| sh");
testopen("| sleep 2");
sub testopen {
my $command = shift;
print "Exists: " . (-e $command ? "true" : "false") . "\n";
print "testopen($command)\n";
eval {
open(my $fh, $command) or die "$! $@";
my $data = join('', <$fh>);
close($fh) or die "$! $@";
print $data . "\n";
};
if ($@) {
print $@ . "\n";
}
}
[me@unixbox1:~/perltests]> perl testopensimple.pl
Exists: true
testopen(| pwd)
/home/me/perltests
Exists: true
testopen(pwd |)
/home/me/perltests
Exists: false
testopen(| hostname)
unixbox1
Exists: false
testopen(| cd)
Exists: false
testopen(| sh)
Exists: false
testopen(| sleep 2)
Обновление:
Я не уверен, что это проблема встроенной в оболочку команды против внешней команды.Попробуйте с помощью команды, подобной netstat
, которая является внешней.pwd
- единственная команда, которую я до сих пор нашел, которая возвращает true для проверки существующих с каналами.
Обновление 2:
В ходе нескольких итераций, которые я выполнял, файлы с именем«|pwd 'и' pwd | 'в конечном итоге был создан.Это объясняет, что я вижу.Спасибо.