Indicando o fim da entrada padrão


12

Como alguém indica que terminou de entrar no teste em stdin?

Por exemplo, digamos que desejo criptografar 'blue' usando o MD5 (eu sei que o MD5 é inseguro, mas apenas para este exemplo). eu tentei

user$ blue | md5

o que eu fui levado a entender é como alguém canaliza a entrada para o stdin, mas não funciona direito.

Mas se eu apenas entrar

user$ md5

Eu posso inserir a palavra 'azul'. Mas como indico ao md5 que terminei de inserir texto?


2
Sua primeira tentativa provavelmente não funcionou corretamente porque você estava tentando executar bluecomo um comando em vez de repeti-lo. Tente em echo blue | md5vez disso.
Trey Hunner

Respostas:


16

você está falando em obter um md5sum para um pedaço de texto?

Nesse caso, execute o comando md5sum

digite seu texto, quando terminar, vá para uma nova linha pressionando return

pressione CTRL-D para finalizar sua entrada.

 user$ md5sum
 blue
 CTRL-D

6
Esta é a resposta certa. Ctrl-D é a maneira canônica de finalizar o teclado stdin em qualquer comando do shell. Mas, estranhamente, tenho um / sbin / md5 - de origem indeterminada, mas provavelmente do OpenSSL - no meu sistema (Mac OS X v10.6.3) que não termina no primeiro Ctrl-D. Leva um segundo Ctrl-D para finalizá-lo. O mesmo com openssl md5.
Spiff

4
@ Spiff: Você só precisa de dois ^ D se quiser omitir a nova linha final. Se você pode aceitar (ou precisar) a nova linha final, basta um ^ D em uma nova linha. O caractere EOF (^ D) libera a entrada em buffer. Se não houver entrada em buffer, a leitura do processo do tty obtém uma leitura de comprimento zero (ou seja, EOF). Veja (por exemplo) POSIX XRAT 11.1.9, EOF ; VEOF em termos de Linux ; ou EOF nos termos do FreeBSD .
Chris Johnsen

0

No seu primeiro exemplo, você precisa de um echo:

user$ echo "blue" | md5

é inútil. A idéia era: todas as entradas são pressionadas pelo teclado. O problema era como marcar o final do fluxo.
Znik 25/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.