shasumのハッシュ値のみをエコーし​​ます。

shasumのハッシュ値のみをエコーし​​ます。

shasum到達する方法がありますか?ただハッシュ値を印刷しますか?

出力を別のプログラムにパイプすると、これが可能であることがわかります。

shasum something | cut -d' ' -f1

shasum結果を他の場所にパイピングせずに単に使用してこれを達成する方法はありますか?

答え1

カント。 Perl shasum 6.02およびGNU coreutils 9.1の対応するプログラムでは、ファイル名(標準入力で利用可能)なしでハッシュの-16進表現を印刷する方法はありません。

しかし、これが問題にならないようにしてください!シェルは複数のプログラムを組み合わせるように設計されています。パイプはエンクロージャの必須機能です。。エラーを許可しないように注意してください。これはshパイプラインの設計上の欠陥です。

通常のshでは、シェルパイプよりもコマンド置換を介して「隠された」パイプを使用する方が簡単です。

out=$(shasum <something) && echo "${out%%[!0-9A-Za-z]*}"

説明:コマンドの最初の部分(前&&outはの出力を設定しますshasum。単純な割り当てなので、単一のコマンド交換状態なので、失敗すると失敗しますshasum。オペレーターは、&&左が失敗した場合にコマンド全体が失敗することを保証します。左が成功すると、右側に出力の先行英数字が印刷されます。 (… && echo "${out%% *}"また、将来のバージョンでタブを使用している場合は、上記のバージョンがもう少し強力になるでしょう。)

答え2

いいえ、shasumハッシュが計算されたファイルのファイル名を印刷するか、-標準入力から読み取った場合は常に印刷します。

パイプを避けるには、次のものを使用できます。

perl -MDigest::SHA -e '$s=Digest::SHA->new(); $s->add(<>); print $s->hexdigest(),"\n"' filename

答え3

sha1sumFWIW、ast-open (または) は if の組み込み機能であるcksum -x sha1か、ast-open の一部として構築されるか (via または front でアクティブになる) 入力中にチェックサム合計基準を印刷する FreeBSD にあるユーティリティです。sha1sumksh93builtin sha1sum/opt/ast/bin$PATHsha1

したがって、これらの実装では次のことができます。

sha1sum < thefile
sha1 < thefile
$ ./ast-open/arch/linux.i386-64/bin/ksh
$ builtin sha1sum
$ whence -a sha1sum
sha1sum is a shell builtin
sha1sum is a shell builtin version of /usr/bin/sha1sum
$ echo test | sha1sum
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
$ echo test | /usr/bin/sha1sum
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83  -

openssl sha1hexdump -e '20/1 "%02x" "\n"'以下を使用して16進数に変換できる生のチェックサムを印刷することもできますxxd -p

openssl sha1 -binary -- "$file" | xxd -p

sha1sum出力のGNU実装<thehexsum> -(2番目のスペースは*それを表すために置き換えることができます)バイナリモードMSDOSなどのシステムでは)、. shasumoutput perl(GNU coreutils形式をエミュレートするように設計されています)openssl sha1出力用(stdin)= <thehexsum>openssl sha1 -r-r<thehexsum> *stdin

したがって、すでに述べたように、これについて次のチェックサムを抽出する必要があります。

sha1sum < "$file" | awk '{print $1}'

(およびset -o pipefail保存(またはファイル入力リダイレクト)失敗の事前サポート(sha1sumある場合))

またはPOSIXに似たシェルでは:

sum=$(sha1sum < "$file") && sum=${sum%%[[:space:]]*}

[[:space:]]*[![:xdigit:]]*16進ではなく、最初の数字で始まるすべての項目を削除して置き換えることもできます。

答え4

cut次のコマンドを使用できます。

  1. 切開部位にチューブを挿入する必要はありません。
$ sha256sum ~/hwinfo.txt
d7e1653cc9e37552a70a9daebefdc3bc25949a691086cd325d071a98dfc105aa  /home/user/hwinfo.txt

cut2. 空間を区切り子として活用する際のパイプ挿入

$ sha256sum ~/hwinfo.txt | cut -d" " -f 1
d7e1653cc9e37552a70a9daebefdc3bc25949a691086cd325d071a98dfc105aa

3つのフィールドがあります。

フィールド 1 は sha256sum です。

$ sha256sum ~/hwinfo.txt | cut -d" " -f 1
d7e1653cc9e37552a70a9daebefdc3bc25949a691086cd325d071a98dfc105aa

フィールド 2 は、2 つのスペースの間に何もないので空です。

$ sha256sum ~/hwinfo.txt | cut -d" " -f 2

フィールド 3 はファイル名です。

$ sha256sum ~/hwinfo.txt | cut -d" " -f 3
/home/user/hwinfo.txt

関連情報