我正在编写一个Perl脚本,该脚本应在Shell中执行命令并解析其输出。作为外壳,我打算使用csh。我从这个开始

my $out = `cmd`

但是它不能捕获STDERR,我也需要。使用输出重定向运行sh不会执行任何操作
my $out = `sh -c "cmd 2>&1"`

仍然仅捕获STDOUT,而不捕获STDERR。

即使重定向到csh中的文件对我也不起作用
tcsh$ cmd >& logfile.log

仍仅捕获STDOUT%)

我要执行的命令实际上是sh脚本,并且此脚本中的某些命令会打印到STDERR中,并且我想捕获该输出。如果我执行sh -c "cmd 2>/dev/null",则STDERR实际上会转到/ dev / null,并且只有STDOUT打印在终端中。

有人可以帮我吗?

最佳答案

在这里,您正在捕获sh的STDOUT,而不是cmd的STDERR:

my $out = `sh -c "cmd 2>&1"`;

您可以直接运行cmd吗?
my $out = `cmd 2>&1`;

10-07 19:16
查看更多