Warum verhält sich sha1sum bei gleicher Eingabe anders?

1095
twilbrand

Ich versuche, das Verhalten der ausführbaren Datei sha1sum in etwas Java-Code zu replizieren. Dabei habe ich festgestellt, dass sich sha1sum bei zwei gleichen Szenarien unterschiedlich verhält.

Nehmen Sie die Eingabe von '12345' ohne die einzelnen Anführungszeichen und ohne Zeilenvorschub an.

Wenn ich diese Daten in eine Datei (file1) stecke und sha1sum von der Kommandozeile aus ausführen:

$ sha1sum file1 8cb2237d0679ca88db6464eac60da96345513964 file1 

Wenn ich das tue, bekomme ich jedoch ein anderes Ergebnis:

$ cat file1 | grep -vi foo | grep -vi bar | sha1sum 2672275fe0c456fb671e4f417fb2f9892c7573ba - 

Mit dem Apache-Commons-Codec-Jar kann ich file1 einlesen, den Inhalt abrufen und eine .shahex () -Anweisung ausführen und das erste Ergebnis erhalten. Ich muss jedoch das zweite Ergebnis erhalten (aufgrund von altem Code) und ich kann nicht herausfinden, warum sich sha1sum anders verhält oder was grep mit der Eingabe macht.

Das System führt CentOS 5.4 mit sha1sum 5.97 aus

Irgendwelche Hinweise?

5
Ich habe das nie erkannt, nette Frage matthias krull vor 13 Jahren 0

3 Antworten auf die Frage

14
whitequark

grep fügt eine neue Zeile hinzu.

$ hd file1 00000000 31 32 33 34 35 |12345| 00000005 $ grep -vi test <file1 | hd 00000000 31 32 33 34 35 0a |12345.| 00000006 

Um dasselbe Ergebnis zu erhalten, sollten Sie \n am Ende der Eingabe ein einzelnes Signal hinzufügen, wenn es nicht vorhanden ist.

Nachdem ich den untenstehenden Ratschlag befolgt und eine zusätzliche neue Zeile hinzugefügt habe, denke ich, ich habe Dinge, die funktionieren. Vielen Dank! twilbrand vor 13 Jahren 0
8
msw

Stellen Sie zunächst sicher, dass die Sequenzen identisch sind:

$ cat file1 | grep -vi foo | grep -vi bar > /tmp/junk $ cmp file1 /tmp/junk 

Sonst jagen Sie nur Ihren Schwanz.

Dies war ein brillanter Ratschlag, ich hatte die Ergebnisse ausgedruckt, aber wenn man sie in eine Datei packte, zeigten sich Unterschiede, von denen ich nichts wusste. Leider ist die obige Antwort zum Newline immer noch korrekt und stellt die ultimative Lösung dar. Daher kann ich Ihre Antwort nicht als richtig kennzeichnen. Ich würde, wenn ich zwei richtig markieren könnte. twilbrand vor 13 Jahren 0
Ich habe auch Whitequark abgelehnt, keine Sorge. msw vor 13 Jahren 0
1
Daenyth

Ist dein grep alias, um --color zu haben? Haben Sie die Ausgabe Ihrer Pipeline ohne sha1sum geprüft?

`grep` fügt nur Farbe hinzu (auch mit einem --color-Schalter), wenn in tty geschrieben wird, dh wenn` isatty (1) == 1`. Siehe "man 3 isatty". whitequark vor 13 Jahren 3
Wenn es aus irgendeinem Grund ein Alias ​​auf "--color = always" war, wird die tty-Prüfung ignoriert. Ansonsten hast du recht. Daenyth vor 13 Jahren 1
Nein, es ist kein Alias twilbrand vor 13 Jahren 0