Jim*_*Jim 6 windows perl command-line sha1
我在c:\ temp中有一个名为secure.txt的文件.我想从命令行运行Perl命令来打印secure.txt的SHA1哈希.我正在使用ActivePerl 5.8.2.我之前没有使用Perl,但它是目前最方便的选择.
Gre*_*con 20
perl -MDigest::SHA1=sha1_hex -le "print sha1_hex <>" secure.txt
Run Code Online (Sandbox Code Playgroud)
Perl的命令行选项记录在perlrun中.在上面的命令中从左到右:
-MDigest::SHA1=sha1_hex
在编译时加载Digest :: SHA1模块并导入sha1_hex
,它以十六进制形式提供摘要.-l
自动在任何结尾添加换行符 print
-e
介绍要执行的Perl代码这个看起来很滑稽的钻石是Perl readline
运营商的一个特例:
空文件句柄
<>
是特殊的:它可以用来模仿的行为sed
和awk
.输入来自<>
标准输入,或来自命令行中列出的每个文件.以下是它的工作原理:第一次<>
计算,@ARGV
数组被检查,如果是空,$ARGV[0]
则设置为"-"
,打开时为您提供标准输入.@ARGV
然后将该数组作为文件名列表处理.
因为secure.txt
是命令行中唯一命名的文件,所以它的内容成为参数sha1_hex
.
使用Perl版本5.10或更高版本,您可以将上面的单行缩短五个字符.
perl -MDigest::SHA=sha1_hex -E 'say sha1_hex<>' secure.txt
Run Code Online (Sandbox Code Playgroud)
代码删除了可选的(所有版本的Perl)空白之前<>
,删除-l
和切换-e
到-E
.
say FILEHANDLE LIST
say LIST
say
就像
say LIST
只是一个缩写Run Code Online (Sandbox Code Playgroud){ local $\ = "\n"; print LIST }
此关键字仅在
say
启用该功能时可用:请参阅feature
.
如果您希望将此代码放在方便的实用程序中,请mysha1sum.pl
使用
#! /usr/bin/perl
use warnings;
use strict;
use Digest::SHA1;
die "Usage: $0 file ..\n" unless @ARGV;
foreach my $file (@ARGV) {
my $fh;
unless (open $fh, $file) {
warn "$0: open $file: $!";
next;
}
my $sha1 = Digest::SHA1->new;
$sha1->addfile($fh);
print $sha1->hexdigest, " $file\n";
close $fh;
}
Run Code Online (Sandbox Code Playgroud)
这将计算命令行中命名的每个文件的摘要,并且输出格式与Unix sha1sum
实用程序的输出格式兼容.
C:\> mysha1sum.pl mysha1sum.pl mysha1sum.pl
8f3a7288f1697b172820ef6be0a296560bc13bae mysha1sum.pl
8f3a7288f1697b172820ef6be0a296560bc13bae mysha1sum.pl
Run Code Online (Sandbox Code Playgroud)
你没有说你是否安装了Cygwin,但如果你这样做,sha1sum
则是coreutils软件包的一部分.
小智 5
试试Digest :: SHA模块.
C:\> perl -MDigest::SHA -e "print Digest::SHA->new(1)->addfile('secure.txt')->hexdigest"
Run Code Online (Sandbox Code Playgroud)