我有一个问题,我希望有人可以提供帮助...
我在做什么:
我有一个在简单的foreach循环中执行的以下反引号命令,并将命令输出保存到变量,然后我对该变量执行字符串匹配操作:
$ciphertestoutput = `echo -n | openssl s_client -cipher $tlsCipher -connect $ipaddress:443 2>/dev/null`;
问题:
但是,当我在输出中运行我的脚本时,我收到一条错误消息,我似乎无法停止显示。我并不担心错误发生,但我不希望错误显示在我所做的漂亮命令行输出的中间。
我的输出和错误:
EXP-DES-CBC-SHA CIPHER IS SUPPORTED on 192.168.1.22:443
EXP-EDH-DSS-DES-CBC-SHA CIPHER IS NOT SUPPORTED on 192.168.1.22.443
EXP-RC2-CBC-MD5 CIPHER IS NOT SUPPORTED on 192.168.1.22:443
connect: Connection refused <--- the error I cant get rid of
connect:errno=111 <--- the error I cant get rid of
EXP-RC4-MD5 CIPHER IS NOT SUPPORTED on 192.168.1.22:443
我尝试了什么:
我已尝试并尝试了各种各样的方法来抑制输出中的错误消息,但我尝试的任何方法都不会出现此错误。我过去做过很多类似的事情,但从来没有用反引号来解决这个问题。我有什么明显的遗失吗?
非常感谢您对此的帮助,谢谢
答案 0 :(得分:4)
尝试在您的计划中重新打开 STDERR
,如下所示:
open STDERR, '>/dev/null';
# your command
qx
- 命令的错误将不会显示。因此,您不必担心如何致电您的计划。
P.S。如果您需要,也可以保存STDERR
:
open OLDERR, ">&", \*STDERR; # or die "$!";
open STDERR, ">/dev/null"; # or die "$!";
# your command
open STDERR, ">&OLDERR"; # restoring your stderr
close OLDERR;
# other code
答案 1 :(得分:2)
考虑使用IPC::Run3
:
use IPC::Run3; # Exports run3() by default
run3 \@cmd, \$in, \$out, \$err;
它将stdin,stdout和stderr分隔成不同的引用。至少,它应该可以帮助你弄清楚发生了什么。
答案 2 :(得分:-1)
你确定这些是错误而不是OpenSSL输出(来STDOUT而不是STDERR)?如果您的所有预期输出都以EXP
开头,就像您的示例一样,您可以尝试添加
| grep EXP
进行测试。