我想将命令的输出发送到STDOUT和变量.我想要结合:
my $var = `some command` ;
system( 'some command' ) ;
Run Code Online (Sandbox Code Playgroud)
Tee是朝着正确方向迈出的一步,但是它将它发送到文件而不是变量.我想我可以读取文件,但直接在那里更简单.
Aln*_*tak 15
两个流的输出是否同时发生?
如果没有,你可以这样做:
my $var = 'cmd'
my $output = `$cmd`
print STDOUT $output
Run Code Online (Sandbox Code Playgroud)
或者更安全的版本,不涉及调用子shell,并一次打印到STDOUT一行:
sub backtick(@)
{
my $pid = open(KID, '-|');
die "fork: $!" unless defined($pid);
if ($pid) {
my $output;
while (<KID>) {
print STDOUT $_;
$output .= $_; # could be improved...
}
close(KID);
return $output;
} else {
exec @_;
}
}
my @cmd = ('/bin/ls', '-l');
my $output = backtick(@cmd);
Run Code Online (Sandbox Code Playgroud)
use Capture::Tiny 'tee';
my $output = tee { system( "some command" ) };
Run Code Online (Sandbox Code Playgroud)
我写这篇文章是为了取代Tee和其他大约20个进行某种捕获的模块,但这些模块在某种程度上存在缺陷.
- xdg(又名dagolden)
归档时间: |
|
查看次数: |
21976 次 |
最近记录: |