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
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.
echo "" | $(which shasum 2>/dev/null || which sha1sum 2>/dev/null)
saída:
adc83b19e793491b1c6ea0fd8b46cd9f32e592fc -
no MacOS / Darwin ou no Linux