Perl - 停止命令行输出中出现的错误

per*_*ser 0 error-handling bash perl backticks output

我在做什么:

我有以下反引号命令,该命令在简单的 foreach 循环中执行并将命令输出保存到变量,然后对该变量执行字符串匹配操作:

$ciphertestoutput = `echo -n | openssl s_client -cipher $tlsCipher -connect $ipaddress:443 2>/dev/null`;
Run Code Online (Sandbox Code Playgroud)

问题:

但是,当我在输出中运行脚本时,我收到一条错误消息,提示我似乎无法停止出现。我并不担心错误的发生,但我不希望错误显示在我所做的漂亮命令行输出的中间。

我的输出和错误:

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
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

我已经尝试并尝试了我所知道的各种方法来抑制输出中的错误消息,但我尝试的任何方法都无法阻止此错误的出现。我过去做过很多类似的事情,但从未遇到过这个带有反引号的问题。我在这里缺少什么明显的东西吗?

red*_*0ct 5

尝试在您的程序中重新打开 STDERR,如下所示:

open STDERR, '>/dev/null';    
# your command
Run Code Online (Sandbox Code Playgroud)

您的 - 命令的错误qx将不会显示。所以你不必担心如何调用你的程序。

STDERRPS如果需要的话也可以保存:

open OLDERR, ">&", \*STDERR; # or die "$!";
open STDERR, ">/dev/null"; # or die "$!";
# your command
open STDERR, ">&OLDERR"; # restoring your stderr
close OLDERR;
# other code
Run Code Online (Sandbox Code Playgroud)