Как прозрачно заменить sha1sum на shasum в sh shell?

У меня есть тест, который должен работать на нескольких платформах. На всех других платформах тест использует sha1sum, но на моем Mac OSX El Capitan такая программа не установлена, но shasum прекрасно работает в качестве замены.

Я пытался создать ссылку из /usr/bin/sha1sum в /usr/bin/shasum, но это терпит неудачу, даже как root:

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

Затем я положил его в /usr/local/bin:

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

И это похоже на работу:

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

Но мой тестовый жгут, теперь находящий 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.

Я также пытался использовать alias sha1sum=shasum но жгут не работает с:

sh: line 1: sha1sum: command not found

Я обнаружил, что мой ремень не работает, потому что он использует sh вместо 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

Так почему же sha1sum не работает под sh но shasum работает и sha1sum работает под bash и как я могу получить sha1sum бежать под sh?

Я также не понимаю, почему это не удается:

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.

Теперь я замечаю этот комментарий в /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.

2 ответа

Решение

Решение - ссылка на версию shasum с perl версия добавлена:

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

Или псевдоним к нему:

alias sha1sum=shasum5.18
echo "" | $(which shasum 2>/dev/null || which sha1sum 2>/dev/null) 

выход:

adc83b19e793491b1c6ea0fd8b46cd9f32e592fc  -

на MacOS/Darwin или Linux

Другие вопросы по тегам