Perché sha1sum agisce in modo diverso con lo stesso input?


5

Sto cercando di replicare il comportamento dell'eseguibile sha1sum in alcuni codici java, tuttavia, nel processo che ho scoperto che sha1sum sembra comportarsi diversamente dato lo stesso input in due scenari.

Si supponga di inserire "12345" senza le virgolette singole e senza una nuova riga.

Se inserisco questi dati in un file (file1) ed eseguo sha1sum dalla riga di comando:

$ sha1sum file1
8cb2237d0679ca88db6464eac60da96345513964  file1

Tuttavia, se lo faccio, ottengo un risultato diverso:

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

Usando il vaso di codec commons-apache, sono in grado di leggere nel file1, ottenere il suo contenuto ed eseguire un .shahex () sul contenuto e ottenere il primo risultato. Tuttavia, ho bisogno di ottenere il secondo risultato (a causa del codice legacy) e non riesco a capire perché sha1sum si sta comportando in modo diverso o cosa sta facendo grep all'input.

Il sistema esegue CentOS 5.4 con sha1sum 5.97

Qualche puntatore?


non l'ho mai riconosciuta, bella domanda
Matthias Krull,

Risposte:


14

grep aggiunge una nuova riga.

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

Per ottenere lo stesso risultato, è necessario aggiungere un singolo \n alla fine dell'input se non è presente.


Dopo aver seguito i consigli di seguito e aggiunto una nuova riga in più, penso di far funzionare le cose. Grazie!
twilbrand,

8

Conferma che le sequenze sono identiche, prima di tutto:

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

altrimenti inseguirai la tua coda.


Questo è stato un consiglio geniale, stavo stampando i risultati, ma inserendoli in un file mostrava differenze che non conoscevo. Sfortunatamente la risposta sopra sulla nuova riga è ancora corretta e finisce per essere la soluzione definitiva, quindi non posso contrassegnare la tua risposta corretta. Vorrei se potessi segnare due corretti.
twilbrand,

Ho anche votato per il whitequark, nessuna preoccupazione.
msw,

1

Il tuo grep è aliasato per avere --color? Hai controllato l'output della tua pipeline senza sha1sum in essa?


3
grepaggiunge il colore (anche con un interruttore --color) solo quando si scrive su tty, cioè quando isatty(1) == 1. Vedere man 3 isatty.
whitequark,

1
Se è stato creato un alias --color=alwaysper qualche motivo, ignora il controllo tty. Altrimenti hai ragione.
Daenyth,

no, non è alias
twilbrand il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.