2

Я использую Windows 7 и у меня есть и Cygwin, и инструмент командной строки Git на основе Ming.

Когда я выдаю команду:

c:\>echo -n hello | e:\cygwin\bin\sha512sum

из Windows cmd генерирует

91fe211053c6377ddfd218a061f96de1ca304b10d966a4c3572d9af22bbe86dc471653d0f9b14f923762d0bf83a0abfe285b855e1ee06b0d4ab4a60a8d8801e3 *-

который я считаю неправильным.

Тем не менее, когда я выдаю команду

$ echo -n hello | /e/cygwin/bin/sha512sum

из командной строки git генерирует

9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 *-

который я считаю правильной шестнадцатеричной контрольной суммой. Я предполагал, что точно такой же ввод отправляется точно в тот же двоичный исполняемый файл, но это не может быть правильным с поведением, которое я вижу. Windows CMD выполняет какую-то забавную кодировку, которая отправляет различные данные в двоичный файл cygwin sha512?

РЕДАКТИРОВАТЬ Для тех, кто заинтересован в получении правильной контрольной суммы из стандартного приглашения Windows cmd, уловка заключается в том, чтобы не использовать команду window echo (ответ на это ссылается). Использование команды echo в cygwin создает правильную контрольную сумму.

Например,

e:\cygwin\bin\echo -n hello | e:\cygwin\bin\sha512sum

2 ответа2

3

По умолчанию команда windows echo добавляет пробелы и завершение строки, даже если вызывается с -n . Попробуйте это: echo -n hello > a.txt а затем dir , и вы увидите, что у вас нет 5-байтового файла.

3

По умолчанию Windows echo не понимает "-n". Таким образом, две команды не эквивалентны.

e:\cygwin64\bin>echo -n "hello" |od -c
0000000   -   n       "   h   e   l   l   o   "      \r  \n
0000015

$ echo -n "hello" |od -c
0000000   h   e   l   l   o
0000005

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .