grep 的意外输出

blu*_*ylo 4 grep pipe stdout stderr

我正在使用 pyrit。对于那些不知道的人,pyrit 允许检查 wpa 握手密钥是否有效:

pyrit -r file0.cap analyze 
Run Code Online (Sandbox Code Playgroud)

当文件不包含有效密钥时,输出如下:

Parsing file 'file0.cap' (1/1)...
 AccessPoint e0:xx:xx:xx:xx:xx ('AP_name0'):
No valid EAOPL-handshake + ESSID detected.
Run Code Online (Sandbox Code Playgroud)

现在我只是想知道为什么在发布时:

pyrit -r file0.cap analyze | grep good 
Run Code Online (Sandbox Code Playgroud)

它总是给我(当没有有​​效的握手密钥时):

No valid EAOPL-handshake + ESSID detected.
Run Code Online (Sandbox Code Playgroud)

当有一个有效的密钥时,它就起作用;我们有以下输出:

HMAC_SHA1_AES, good, spread 1
Run Code Online (Sandbox Code Playgroud)

Spa*_*awk 7

我想是因为这条线

No valid EAOPL-handshake + ESSID detected.
Run Code Online (Sandbox Code Playgroud)

可能是pyrit命令的标准错误,而不是标准输出。通常,|标准输出到下一个命令,标准错误立即写入终端。相反,如果您想通过管道传递标准错误和输出,那么您可以使用|&. IE

pyrit -r file0.cap analyze |& grep good 
Run Code Online (Sandbox Code Playgroud)