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

12

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

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

user$ blue | md5

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

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

user$ md5

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

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

Ответы:

16

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

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

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

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

 user$ md5sum
 blue
 CTRL-D
Bryan
источник
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 .
Крис Джонсен
0

В вашем первом примере вам нужно echo:

user$ echo "blue" | md5
Приостановлено до дальнейшего уведомления.
источник
это бесполезно. Идея была, весь ввод нажимается с клавиатуры. Проблема заключалась в том, как отметить конец потока.
Znik