2016-09-10 7 views
2
$ echo * 
a b c 
$ cat * 
file 1 
file 2 
file 3 
$ factor -e=" \ 
> USING: globs io sequences sorting io.files io.encodings.utf8 ; \ 
> \"*\" glob natural-sort [ utf8 file-lines ] map concat [ print ] each " 
file 1 
file 2 
file 3 

出力はFactorのglobとシェルのglobを使用して同じです。出力上のdiffは、それらが正確に一致することを示します。Factorで同じSHA-224の和をcoreutilsとして取得sha224sum

$ factor -e=" \ 
> USING: math.parser checksums checksums.sha globs io sequences sorting io.files io.encodings.utf8 ; \ 
> \"*\" glob natural-sort [ utf8 file-lines ] map concat sha-224 checksum-lines bytes>hex-string print " 

0feaf7d5c46b802404760778091ed1312ba82d4206b9f93c35570a1a 
$ cat * | sha224sum 
d1240479399e5a37f8e62e2935a7ac4b9352e41d6274067b27a36101 

しかし、チェックサムは一致しません。md5チェックサムもありません。どうしてこれなの? coreutils sha224sumと同じチェックサムをFactorで取得するにはどうすればよいですか?

エンコードをasciiに変更しても出力が変更されず、checksum-linesの代わりに"\n" join sha-224 checksum-bytesも変更されません。

+0

「\ n」アンカー連結を欠いていませんか?私は、ファクタコードが3つのファイルの内容の配列をハッシュしていると思います。 –

+0

nevermind、checksum-linesはascii 10と結合しているので、それはそうではありません:/ –

+0

ああ、行方不明の改行です!これはメーリングリストで回答されましたが、ここでも答えが得られました。 –

答えて

2

この奇妙な動作は、チェックサム行のバグが原因です。 factor/factor#1708

問題を見つけるためのjonenstのおかげで、および因子メーリングリスト上でこのコードのcalsioro

このコード:

d1240479399e5a37f8e62e2935a7ac4b9352e41d6274067b27a36101:

[ 
    { "a" "b" "c" } 3 [1,b] 
    [ number>string "file " prepend [ write ] curry 
     ascii swap with-file-writer ] 2each 

    "*" glob natural-sort [ utf8 file-lines ] map concat 
    [ "\n" append ] map "" join ! Add newlines between and at the end 

    sha-224 checksum-bytes bytes>hex-string print 
] with-test-directory 

が同じハッシュを与えます

また
+0

(実際には問題を発見したのはJohn Harperでした...クレジットは私にではなく、彼に行くべきです) –

+1

@fedes。更新されたc: – cat

0

jonenstpointed outこと:また

、あなたが得る三つの異なる長さについては、「exercism /自己更新/自己update.factorは」の末尾に「\ n」の文字が欠落しています最後の行だからあなたは驚くべき結果を得るのです。

チェックサムファイルをしようとしている場合は、末尾に改行があることを確認してください。

関連する問題