Указывает конец стандартного ввода


12

Как можно указать, что вы завершили ввод теста в стандартный ввод?

Например, допустим, что я хочу зашифровать «синий» с использованием MD5 (я знаю, что MD5 небезопасен, но только для этого примера). Я старался

user$ blue | md5

я понял, как один канал вводит в stdin, но он работает неправильно.

Но если я просто войду

user$ md5

Я могу ввести слово «синий». Но как мне указать md5, что я закончил ввод текста?


2
Ваша первая попытка, вероятно, не сработала правильно, потому что вы пытались выполнить blueкоманду вместо того, чтобы повторить ее. Попробуй echo blue | md5вместо этого.
Трей Ханнер

Ответы:


16

Вы говорите о получении md5sum для фрагмента текста?

если это так, запустите команду md5sum

введите текст, когда закончите, перейдите на новую строку, нажав клавишу возврата

нажмите CTRL-D, чтобы закончить ввод.

 user$ md5sum
 blue
 CTRL-D

6
Это правильный ответ. Ctrl-D - это канонический способ завершить ввод с клавиатуры в любой команде оболочки. Но, как ни странно, у меня есть / sbin / md5 - неопределенного происхождения, но, вероятно, из OpenSSL - в моей системе (Mac OS X v10.6.3), которая не заканчивается на первом Ctrl-D. Требуется второй Ctrl-D, чтобы завершить его. То же самое с openssl md5.
Spiff

4
@Spiff: Вам нужно только два ^ D, если вы хотите пропустить последний перевод строки. Если вы можете принять (или нуждаетесь) в заключительном переводе строки, то достаточно одного ^ D на новой строке. Символ EOF (^ D) сбрасывает буферизованный ввод. Если нет буферизованного ввода, процесс чтения из tty получает чтение нулевой длины (т.е. EOF). Смотрите (например) POSIX XRAT 11.1.9, EOF ; VEOF в Linux termios ; или EOF в терминологии FreeBSD .
Крис Джонсен

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.