是否可以为以下命令禁用stdout
和stderr
输出?
req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ./private.key -out ./mycert.crt -subj "/C=DE/ST=BW/L=Karlsruhe/O=foobar/OU=foobar/CN=foobar"
该命令始终会产生以下输出,我想取消显示:
Generating a 2048 bit RSA private key
.............................................
.............................................................+++
........................................+++
writing new private key to './private.key'
我已经尝试使用2>&1
的任何变体来重定向输出,但是由于以下原因,他在这种情况下不起作用:
openssl
命令在这样的Powershell会话中执行:
$opensslCommand = 'req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ./private.key -out ./mycert.crt -subj "/C=DE/ST=BW/L=Karlsruhe/O=foobar/OU=foobar/CN=foobar"'
Invoke-Expression -Command $opensslCommand
同样,PowerShell流的重定向也不起作用。
根本不会有问题,但是如果您以非交互方式运行命令,则openssl输出将发送到stderr
而不是stdout
。
Git
的行为类似。但是您可以使用以下环境var更改输出:$env:GIT_REDIRECT_STDERR = '2>&1'
Module Function
-通话->Sub Function
-调用表达->OpenSSL Command (with redirect *>$null)
发生错误是因为用ErrorAction 'Stop'
调用了 Sub Function 。如果我将其更改为默认的Continue
,则会抑制输出。
为了仍然能够进行适当的错误处理,我保留了全局默认设置Error Action: Stop
并手动为Invoke-Command
设置:
$ErrorActionPreference = 'Continue'
Invoke-Expression -Command 'openssl ... *>$null'
$ErrorActionPreference = 'Stop'
答案 0 :(得分:0)
请记住,在将stdout
合并到stderr
之后,也应禁止它。如果不起作用,请将其包装在脚本块中,然后重定向整个内容的输出,如下所示:
& { .\path\to\openssl.exe $opensslCommand.Split(' ') } 2>&1 1>$null