O comando% windowsecho
padrão adiciona espaços e terminação de linha, mesmo que seja chamado com -n
. Tente isto: echo -n hello > a.txt
seguido por dir
, e você verá que não tem um arquivo de 5 bytes.
Estou usando o Windows 7 e tenho o Cygwin e a ferramenta de linha de comando Git baseada em ming.
Quando eu emito o comando:
c:\>echo -n hello | e:\cygwin\bin\sha512sum
do Windows cmd, ele gera
91fe211053c6377ddfd218a061f96de1ca304b10d966a4c3572d9af22bbe86dc471653d0f9b14f923762d0bf83a0abfe285b855e1ee06b0d4ab4a60a8d8801e3 *-
que acredito estar incorreto .
No entanto, quando eu emito o comando
$ echo -n hello | /e/cygwin/bin/sha512sum
da linha de comando do git, ele gera
9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 *-
que eu acredito ser o checksum hexadecimal correto. Eu estava assumindo que a mesma entrada está sendo enviada para o mesmo executável binário, mas isso não pode estar certo com o comportamento que estou vendo. O Windows CMD faz algum tipo de codificação engraçada que envia entradas diferentes para o binário do cygwin sha512?
EDITAR Para qualquer pessoa interessada em obter a soma de verificação correta a partir de um prompt padrão do Windows cmd, o truque é não usar o comando echo da janela (a resposta alude a isso). Usar o comando echo do cygwin gera a soma de verificação correta.
Por exemplo,
e:\cygwin\bin\echo -n hello | e:\cygwin\bin\sha512sum
O echo padrão do windows não entende "-n". Então os dois comandos não são equivalentes.
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