Позначення кінця стандартного вводу


12

Як можна вказати, що хтось закінчив вступний тест у stdin?

Наприклад, скажімо, що я хочу зашифрувати "синій" за допомогою MD5 (я знаю, що MD5 незахищений, але тільки для цього прикладу). я намагався

user$ blue | md5

що мені привели зрозуміти, як одна труба вводить в stdin, але це не працює правильно.

Але якщо я просто ввійду

user$ md5

Я можу ввести слово "синій". Але як я вкажу на md5, що закінчую введення тексту?


2
Ваша перша спроба, ймовірно, не спрацювала правильно, оскільки ви намагалися виконати blueкоманду замість того, щоб повторювати її. Спробуйте echo blue | md5замість цього.
Мисливець на Трей

Відповіді:


16

Ви говорите про отримання md5sum за фрагмент тексту?

якщо так, запустіть команду md5sum

введіть текст, коли закінчите, перейдіть до нового рядка натисканням клавіші return

натисніть CTRL-D, щоб завершити введення даних.

 user$ md5sum
 blue
 CTRL-D

6
Це правильна відповідь. Ctrl-D - це канонічний спосіб припинення stdin клавіатури в будь-якій команді оболонки. Але як не дивно, у мене є / 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 ; або EOF у FreeBSD термінах .
Кріс Джонсен

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.