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?

waiwai933
fonte
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
bryan
fonte
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
Pausado até novo aviso.
fonte
é 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