Ende der Standardeingabe

9451
waiwai933

Wie zeigt man an, dass man den Test in stdin abgeschlossen hat?

Nehmen wir an, ich möchte 'blue' mit MD5 verschlüsseln (ich weiß, MD5 ist unsicher, aber nur für dieses Beispiel). Ich habe es versucht

user$ blue | md5 

Was mich veranlasst hat zu verstehen, ist, wie man die Eingabe an stdin leitet, aber es funktioniert nicht richtig.

Aber wenn ich nur eintrete

user$ md5 

Ich kann das Wort 'blau' eingeben. Aber wie kann ich md5 mitteilen, dass ich mit der Texteingabe fertig bin?

12
Ihr erster Versuch hat wahrscheinlich nicht richtig funktioniert, weil Sie versucht haben, 'blue' als Befehl auszuführen, anstatt ihn zu wiederholen. Versuchen Sie es mit `echo blue | stattdessen md5`. Trey Hunner vor 13 Jahren 2

2 Antworten auf die Frage

16
bryan

sprichst du davon, eine md5sum für einen text zu bekommen?

Führen Sie in diesem Fall den Befehl md5sum aus

Geben Sie Ihren Text ein, wenn Sie fertig sind, indem Sie die Eingabetaste drücken

Drücken Sie STRG-D, um Ihre Eingabe zu beenden.

 user$ md5sum blue CTRL-D 
Das ist die richtige Antwort. Strg-D ist die kanonische Methode, um den Tastatur-Standardeintrag in einem beliebigen Shell-Befehl zu beenden. Aber seltsamerweise habe ich / sbin / md5 - unbestimmten Ursprungs, aber wahrscheinlich von OpenSSL - auf meinem System (Mac OS X 10.6.3), das auf der ersten Ctrl-D nicht endet. Es dauert eine zweite Strg-D, um es zu beenden. Dasselbe gilt für `openssl md5`. Spiff vor 13 Jahren 6
@Spiff: Du brauchst nur zwei ^ D, wenn du die letzte Zeile weglassen möchtest. Wenn Sie den letzten Zeilenumbruch annehmen können (oder benötigen), genügt ein einziger ^ D in einer neuen Zeile. Das EOF-Zeichen (^ D) leert die gepufferte Eingabe. Wenn keine gepufferte Eingabe vorhanden ist, erhält der Prozess, der vom tty gelesen wird, eine Länge von null (dh EOF). Siehe zB [POSIX XRAT 11.1.9, EOF] (http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap11.html#tag_11_01_09); [VEOF in Linux-Termini] (http://linux.die.net/man/3/termios); oder [EOF in FreeBSD-Termios] (http://www.freebsd.org/cgi/man.cgi?query=termios&sektion=4). Chris Johnsen vor 13 Jahren 4
0
Dennis Williamson

In Ihrem ersten Beispiel benötigen Sie echo:

user$ echo "blue" | md5 
es ist sinnlos. Idee war, alle Eingaben werden per Tastatur gedrückt. Das Problem war, wie man den Stream als Ende markiert. Znik vor 10 Jahren 0