Как прозрачно заменить 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