função bash para 'pv fileName | sha256sum -b '

4

Estou no Linux Mint 18.2 com o GNU bash, versão 4.3.48 (1) -release (x86_64-pc-linux-gnu).

Gostaria de redefinir sha256sum com minha função definida em .bash_aliases para mostrar o progresso, porque eu o uso para arquivos com mais de 100 GB.

A função segue:

function sha256sum {

    if [ -z "$1" ]
    then
    {
        \sha256sum --help
    }
    else
    {
        pv $1 | \sha256sum -b
    }
    fi

}

Mas há alguns culpados, que não posso explicar.

Por um lado, ele se comporta de forma inesperada, de alguma forma eu consegui forçá-lo a "comer" o parâmetro.

Especificamente, o seguinte arquivo:

-rw-r--r-- 1 root root 2.0K Jul 24 12:29 testdisk.log

Agora, exibe o tamanho do arquivo, sem fim:

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

O que estou fazendo de errado? Eu tentei estrutura diferente, com e sem chaves, com e sem ponto e vírgula, e como por uma hora nenhum resultado melhor do que este.

EDIT1:

Removendo o sinal \ da aparência da função:

function sha256sum {

    if [ -z "$1" ]
    then
    {
        sha256sum --help
    }
    else
    {
        pv "$1" | sha256sum -b
    }
    fi

}

Resultados em:

1.92KiB 0:00:00 [56.8MiB/s] [====================================================>] 100%            
1.92KiB
1.92KiB
1.92KiB
1.92KiB
...
...
...
^C
[2]+  Stopped                 pv "$1" | sha256sum -b
    
por Vlastimil 19.10.2017 / 14:07

2 respostas

6

Cada uma das ocorrências de \sha256sum no corpo da sua função é uma chamada recursiva para essa função. Prefixando o nome com uma barra invertida impede que ele seja interpretado como um alias, mas não impede interpretando-o como uma função.

Você deseja escrever command sha256sum em vez de \sha256sum ; para exemplo, mantendo o layout da sua função original:

function sha256sum {

    if [ -z "$1" ]
    then
    {
        command sha256sum --help
    }
    else
    {
        pv "$1" | command sha256sum -b
    }
    fi

}
    
por 19.10.2017 / 15:11
2

Como dhag aponta , você está chamando recursivamente sua função.

Ele sugere que você solte as barras invertidas e use command .

Além disso, as chaves não são necessárias (mas são permitidas).

Esta é a minha função:

sha256sum () {
    if [ -n "$1" ]; then
        pv "$1" | command sha256sum -
    else
        command sha256sum --help
    fi
}

Uma desvantagem desta função do shell é que você não pode passar sinalizadores de linha de comando para sha256sum ou vários arquivos de entrada.

    
por 19.10.2017 / 18:08

Tags