Почему sha1sum действует по-разному с одним и тем же вводом?

992
twilbrand

Я пытаюсь повторить поведение исполняемого файла sha1sum в некотором Java-коде, однако в процессе, который я обнаружил, sha1sum, похоже, ведет себя по-разному при одинаковом вводе в двух сценариях.

Предположим, что введен «12345» без одинарных кавычек и без новой строки.

Если я помещаю эти данные в файл (file1) и запускаю sha1sum из командной строки:

$ sha1sum file1 8cb2237d0679ca88db6464eac60da96345513964 file1 

Однако, если я сделаю это, я получу другой результат:

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

Используя jar-файл apache commons-codec, я могу прочитать в file1, получить его содержимое, выполнить .shahex () для содержимого и получить первый результат. Однако мне нужно получить второй результат (из-за унаследованного кода), и я не могу понять, почему sha1sum ведет себя по-другому или что grep делает с вводом.

Система работает под управлением CentOS 5.4 с sha1sum 5.97

Есть указатели?

5
я никогда не узнавал это, хороший вопрос matthias krull 14 лет назад 0

3 ответа на вопрос

14
whitequark

grep добавляет новую строку.

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

Чтобы получить тот же результат, вы должны добавить один \n в конце ввода, если его нет.

После принятия приведенного ниже совета и добавления дополнительной строки я думаю, что у меня все работает. Спасибо! twilbrand 14 лет назад 0
8
msw

Убедитесь, что последовательности идентичны, сначала:

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

в противном случае вы просто будете преследовать свой хвост.

Это был великолепный совет, я распечатывал результаты, но помещение их в файл показало различия, о которых я не знал. К сожалению, приведенный выше ответ о новой строке по-прежнему правильный и в конечном итоге является окончательным решением, поэтому я не могу пометить ваш ответ как правильный. Я бы, если бы мог отметить два правильных. twilbrand 14 лет назад 0
Я проголосовал за Уайткварка, тоже не стоит беспокоиться. msw 14 лет назад 0
1
Daenyth

Ваш grep имеет псевдоним? --Color? Вы проверили вывод вашего конвейера без sha1sum в нем?

`grep` добавляет цвет (даже с переключателем --color) только при записи в tty, т.е. когда` isatty (1) == 1`. Смотрите "человек 3 isatty". whitequark 14 лет назад 3
Если по какой-то причине он был связан с `--color = always`, он игнорирует проверку tty. В противном случае вы правы. Daenyth 14 лет назад 1
Нет, это не псевдоним twilbrand 14 лет назад 0

Похожие вопросы