Como substituir transparentemente o sha1sum por shasum no sh shell?

1

Eu tenho um teste que precisa ser executado em várias plataformas. Em todas as outras plataformas, o teste usa sha1sum , mas no meu Mac OSX El Capitan, não existe tal programa instalado, mas shasum funciona bem como um substituto.

Eu tentei criar um link de /usr/bin/sha1sum para /usr/bin/shasum , mas isso falha, mesmo como root:

bash-3.2$ cd /usr/bin
bash-3.2$ sudo ln shasum sha1sum
ln: sha1sum: Operation not permitted

Eu então coloco em /usr/local/bin :

bash-3.2$ cd /usr/local/bin
bash-3.2$ ln -s /usr/bin/shasum sha1sum

E parece funcionar:

bash-3.2$ sha1sum -c files.sha1sum
smallData.txt: OK

Mas, meu equipamento de teste, agora encontrando sha1sum, ainda falha:

perl version 5.18.2 can't run /usr/local/bin/sha1sum.  Try the alternative(s):

(Error: no alternatives found)

Run "man perl" for more information about multiple version support in
Mac OS X.

Eu também tentei usar alias sha1sum=shasum , mas o arnês falha com:

sh: line 1: sha1sum: command not found

Descobri que meu equipamento está falhando porque está usando sh em vez de bash .

sh-3.2$ sha1sum -c files.sha1sum
perl version 5.18.2 can't run /usr/local/bin/sha1sum.  Try the alternative(s):

(Error: no alternatives found)

Run "man perl" for more information about multiple version support in
Mac OS X.
sh-3.2$ shasum -c files.sha1sum
smallData.txt: OK

Então, por que é que sha1sum não funciona em sh , mas shasum funciona e sha1sum funciona com bash e como posso obter sha1sum para ser executado em sh ?

Também estou confuso sobre o motivo de isso falhar:

bash-3.2$ echo "sha1sum -c files.sha1sum" | bash
perl version 5.18.2 can't run /usr/local/bin/sha1sum.  Try the alternative(s):

(Error: no alternatives found)

Run "man perl" for more information about multiple version support in
Mac OS X.

Agora percebo esse comentário no arquivo /usr/bin/shasum :

The contents of this script should normally never run!  The perl wrapper
should pick the correct script in /usr/bin by appending the appropriate version.
You can try appending the appropriate perl version number.  See perlmacosx.pod
for more information about multiple version support in Mac OS X.
    
por WilliamKF 05.05.2016 / 20:53

2 respostas

0

A solução é o link para a versão de shasum com a versão perl anexada:

cd /usr/local/bin
ln -s /usr/bin/shasum5.18 sha1sum

Ou para alias:

alias sha1sum=shasum5.18
    
por 05.05.2016 / 21:13
0
echo "" | $(which shasum 2>/dev/null || which sha1sum 2>/dev/null) 

saída:

adc83b19e793491b1c6ea0fd8b46cd9f32e592fc  -

no MacOS / Darwin ou no Linux

    
por 05.04.2018 / 06:00