Wskazuje koniec standardowego wejścia

12

W jaki sposób można wskazać, że zakończył się test na stdin?

Na przykład powiedzmy, że chcę zaszyfrować „niebieski” za pomocą MD5 (wiem, że MD5 jest niezabezpieczony, ale tylko w tym przykładzie). próbowałem

user$ blue | md5

co doprowadziło mnie do zrozumienia, jak jeden potok wprowadza do standardowego wejścia, ale to nie działa poprawnie.

Ale jeśli tylko wejdę

user$ md5

Mogę wpisać słowo „niebieski”. Ale jak mam wskazać md5, że skończyłem wprowadzać tekst?

waiwai933
źródło
2
Twoja pierwsza próba prawdopodobnie nie działała poprawnie, ponieważ próbujesz wykonać bluepolecenie, zamiast go powtarzać. Spróbuj echo blue | md5zamiast tego.
Trey Hunner,

Odpowiedzi:

16

czy mówisz o uzyskaniu sumy md5 na kawałek tekstu?

jeśli tak, uruchom komendę md5sum

wpisz tekst, po zakończeniu przejdź do nowego wiersza, naciskając klawisz Return

naciśnij CTRL-D, aby zakończyć wprowadzanie.

 user$ md5sum
 blue
 CTRL-D
bryan
źródło
6
To jest właściwa odpowiedź. Ctrl-D to kanoniczny sposób zakończenia standardowego wejścia klawiatury w dowolnym poleceniu powłoki. Ale, co dziwne, mam / sbin / md5 - nieokreślonego pochodzenia, ale prawdopodobnie z OpenSSL - w moim systemie (Mac OS X 10.6.3), który nie kończy się na pierwszym Ctrl-D. Zakończenie drugiego Ctrl-D. To samo z openssl md5.
Spiff
4
@Spiff: Powinieneś potrzebować tylko dwóch ^ D, jeśli chcesz pominąć ostatnią nową linię. Jeśli możesz zaakceptować (lub potrzebujesz) ostatnią nową linię, to wystarczy ^ ^ na nowej linii. Znak EOF (^ D) opróżnia buforowane dane wejściowe. Jeśli nie ma buforowanego wejścia, odczyt procesu z tty otrzymuje odczyt o zerowej długości (tj. EOF). Patrz (np.) POSIX XRAT 11.1.9, EOF ; VEOF w systemie Linux ; lub EOF w termosach FreeBSD .
Chris Johnsen
0

W pierwszym przykładzie potrzebujesz echo:

user$ echo "blue" | md5
Wstrzymano do odwołania.
źródło
to jest bezużyteczne. Pomysł polegał na tym, że wszystkie dane są naciskane przez klawiaturę. Problem polegał na tym, jak oznaczyć koniec strumienia.
Znik