我正在编写一个perl脚本,我将在其中运行命令并获得如下输出:your id is <895162>
。我将存储此字符串并仅读取此字符串中的数字。问题是我的主命令将使用perl的system命令在shell中运行。
喜欢:
#ids.csh is "echo your id is <1123221>"
my $p = system ("./ids.csh 2>&1 > /dev/null");
print "$p\n";
$p =~ s/[^0-9]//g;
但输出没有复制到$ p文件,我哪里错了?
答案 0 :(得分:2)
您已将所有输出重定向到/dev/null
,这意味着您的所有输出都将被丢弃。
我想你可能意味着:
./ids.csh 2>/dev/null
将stderr重定向到/ dev / null,同时保持stdout不变。
答案 1 :(得分:2)
my $p = `./ids.csh 2>/dev/null`;
正如Len Jaffe所说,你可能想扔掉stderr输出(而不是将它显示在你的屏幕上或你的stderr去的地方),而不是stdout(包含你要捕获的消息)。
请注意,当qx失败时,它可以出于几个不同的原因这样做,并且构造有意义的错误消息并非易事。如果遇到问题,请考虑使用IPC::System::Simple的capture()代替。