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

9361
waiwai933

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

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

user$ blue | md5 

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

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

user$ md5 

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

12
Ваша первая попытка, вероятно, не сработала правильно, потому что вы пытались выполнить `blue` как команду вместо того, чтобы повторить ее. Попробуйте `эхо синего | вместо md5`. Trey Hunner 13 лет назад 2

2 ответа на вопрос

16
bryan

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

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

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

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

 user$ md5sum blue CTRL-D 
Это правильный ответ. Ctrl-D - это канонический способ завершить ввод с клавиатуры в любой команде оболочки. Но, как ни странно, у меня есть / sbin / md5 - неопределенного происхождения, но, вероятно, из OpenSSL - в моей системе (Mac OS X v10.6.3), которая не заканчивается на первом Ctrl-D. Требуется второй Ctrl-D, чтобы завершить его. То же самое с `openssl md5`. Spiff 13 лет назад 6
@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); [VEOF в Linux termios] (http://linux.die.net/man/3/termios); или [EOF в терминах FreeBSD] (http://www.freebsd.org/cgi/man.cgi?query=termios&sektion=4). Chris Johnsen 13 лет назад 4
0
Dennis Williamson

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

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