指示标准输入结束

wai*_*933 12 terminal keyboard-shortcuts shell stdin

如何在标准输入中表明一个人已经完成了进入测试?

例如,假设我希望使用 MD5 加密“蓝色”(我知道 MD5 不安全,但仅针对此示例)。我试过

user$ blue | md5
Run Code Online (Sandbox Code Playgroud)

我被引导理解是一个管道输入到标准输入的方式,但它不能正常工作。

但如果我只是输入

user$ md5
Run Code Online (Sandbox Code Playgroud)

我可以输入“蓝色”这个词。但是如何向 md5 表明我已完成输入文本?

bry*_*yan 16

你是说为一段文字获得一个 md5sum 吗?

如果是这样运行 md5sum 命令

输入文本,完成后按回车移至新行

按 CTRL-D 结束您的输入。

 user$ md5sum
 blue
 CTRL-D
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案。Ctrl-D 是在任何 shell 命令中终止键盘 stdin 的规范方式。但奇怪的是,我的系统 (Mac OS X v10.6.3) 上有一个 /sbin/md5——来源不确定,但可能来自 OpenSSL——它不会在第一个 Ctrl-D 时终止。它需要第二个 Ctrl-D 来终止它。与 `openssl md5` 相同。 (7认同)
  • @Spiff:如果你想省略最后的换行符,你应该只需要两个 ^D。如果您可以接受(或需要)最后的换行符,那么新行上的单个 ^D 就足够了。EOF 字符 (^D) 刷新缓冲输入。如果没有缓冲输入,则从 tty 读取的进程将获得零长度读取(即 EOF)。参见(例如)[POSIX XRAT 11.1.9,EOF](http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap11.html#tag_11_01_09);[Linux termios 中的 VEOF](http://linux.die.net/man/3/termios); 或 [FreeBSD termios 中的 EOF](http://www.freebsd.org/cgi/man.cgi?query=termios&sektion=4)。 (4认同)