我在 Linux Mint 18.2 上使用 GNU bash,版本 4.3.48(1)-release (x86_64-pc-linux-gnu)。
我想重新定义sha256sum
我.bash_aliases
为它定义的函数以显示进度,因为我经常将它用于 100+GB 的文件。
功能如下:
function sha256sum {
if [ -z "$1" ]
then
{
\sha256sum --help
}
else
{
pv $1 | \sha256sum -b
}
fi
}
Run Code Online (Sandbox Code Playgroud)
但是有一些罪魁祸首,我无法解释。
对于它的行为出乎意料,我以某种方式设法迫使它“吃掉”参数。
具体来说,以下文件:
-rw-r--r-- 1 root root 2.0K Jul 24 12:29 testdisk.log
Run Code Online (Sandbox Code Playgroud)
现在它输出文件的大小,永无止境:
vlastimil@vb-nb-mint ~ $ sha256sum testdisk.log
1.92KiB 0:00:00 [40.8MiB/s] [====================================================>] 100%
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
1.92KiB
...
...
...
^C
[1]+ Stopped pv $1 | \sha256sum -b
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我尝试了不同的结构,带和不带大括号,带和不带分号,一小时没有比这个更好的结果。
编辑1:
删除\
函数的符号,如下所示:
function sha256sum {
if [ -z "$1" ]
then
{
sha256sum --help
}
else
{
pv "$1" | sha256sum -b
}
fi
}
Run Code Online (Sandbox Code Playgroud)
结果是:
1.92KiB 0:00:00 [56.8MiB/s] [====================================================>] 100%
1.92KiB
1.92KiB
1.92KiB
1.92KiB
...
...
...
^C
[2]+ Stopped pv "$1" | sha256sum -b
Run Code Online (Sandbox Code Playgroud)
\sha256sum
函数体中的每次出现都是对该函数的递归调用。使用反斜杠作为名称前缀可防止将其解释为别名,但不会防止将其解释为函数。
你想写command sha256sum
而不是\sha256sum
; 例如,保持原始函数的布局:
function sha256sum {
if [ -z "$1" ]
then
{
command sha256sum --help
}
else
{
pv "$1" | command sha256sum -b
}
fi
}
Run Code Online (Sandbox Code Playgroud)