这个命令为什么有效?

这个命令为什么有效?

有人向我展示了这个命令来获取证书的到期日期:

echo | openssl s_client -connect <server>:7002 2>/dev/null| openssl x509 -noout -dates

输出:

notBefore=Sep  8 08:00:30 2015 GMT
notAfter=Sep  7 08:00:30 2016 GMT

所以它可以工作,但我问为什么你需要在它前面加上 echo |,因为这看起来就像你什么都没有回显。他说如果你不在命令前面加上 echo |,那么它会给你输出,但你不会得到提示,它只是挂起,这确实是真的,但我想了解为什么。

答案1

因为在linux中,echo<ENTER>会回显一个新行。

在 Windows 中是这样的echo. (echo/ 也可以工作,而且其他一些东西也可以工作)

这就像当你收到提示时按下回车键一样。

各种事情都可能退出提示符。回显一些字符,然后当没有更多输入时,提示符就会退出。通过将输入传输给它,它会接受该输入,而不是从键盘请求输入并等待例如 Windows 中的 ctrl-z。(在 Linux 中,在行首按 ctrl-d 也可以这样做,我刚刚测试过它,它在这里提到了https://unix.stackexchange.com/questions/16333/how-to-signal-the-end-of-stdin-input

通常,当收到提示时,有时回显任何字符都可以,例如,如果您这样做dir /p并收到提示“按任意键继续”。然后尝试echo a| dir /p,它将显示列表并为您按下键。

但是,使用这样的命令时,一定要检查它是否只适用于 ENTER,或者是否适用于其他键,另外还要检查它是否在寻找输入的结束。例如https://stackoverflow.com/questions/33814493/why-cant-this-c-sharp-program-be-piped-to-like-the-more-command-and-what-c

因此,在 Windows 中,如果您输入 more,则会得到一个提示。如果您输入一些字符,它会将其视为输入,并输出它,因为 more 就是这样做的,但它不会退出。但是,如果您向 more 回显哪怕一个字符,例如,echo a|more它就会退出,这是因为当没有更多字符可输入时,该提示将退出/停止尝试读取 stdin。

此外,如果您想查看回显的内容,则可以使用 xxd,例如在 Windows 中,echo a |xxd -p,您会看到它发送了一个“a”和一个空格。如果您执行 dod echo a >aa 然后 dir aa 会看到它是两个字节,您也会看到这一点。您可以从 cygwin 或 vim7 获取 xxd,当然对于 linux 也是如此。

相关内容