2
爲什麼這存在檢查返回pwd與其他示例不同的結果?這裏發生了什麼事?Perl -e測試奇怪?
[[email protected]:~/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 "$! [email protected]";
my $data = join('', <$fh>);
close($fh) or die "$! [email protected]";
print $data . "\n";
};
if ([email protected]) {
print [email protected] . "\n";
}
}
[[email protected]:~/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)
更新:
我不相信它的內置VS外部命令發出一個外殼。嘗試使用外部的netstat
等命令。 pwd
是我迄今發現的唯一命令,它在管道存在檢查上返回true。
更新2:
通過測試的多次迭代我在做什麼,文件名爲「| pwd'和'pwd |'最終被創建。這解釋了我所看到的。謝謝。
這似乎是在這裏發生的事情。我還用open()做了一些測試,使用<(讀)和>(寫)指示器,這些指示器又創建了「|」 pwd'和'pwd |'文件。謝謝。 – user255205
@ user255205:您可以使用3-arg打開的管道,指定'| -'或' - |'作爲第二個參數。請參閱http://perldoc.perl.org/perlopentut.html中的「財富」示例 – ysth