Wie ersetze ich shasum durch Shasum im Sh-Shell?

862
WilliamKF

Ich habe einen Test, der auf mehreren Plattformen laufen muss. Auf allen anderen Plattformen, die der Test verwendet sha1sum, ist auf meinem Mac OSX El Capitan kein solches Programm installiert, es shasumfunktioniert jedoch gut als Ersatz.

Ich habe versucht, einen Link von /usr/bin/sha1sumnach zu erstellen /usr/bin/shasum, aber das schlägt selbst als root fehl:

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

Ich stecke es dann in /usr/local/bin:

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

Und es scheint zu funktionieren:

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

Aber mein Testgeschirr, das jetzt sha1sum findet, schlägt immer noch fehl:

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. 

Ich habe es auch probiert, alias sha1sum=shasumaber das Geschirr schlägt fehl mit:

sh: line 1: sha1sum: command not found 

Ich habe festgestellt, dass mein Geschirr fehlschlägt, weil es shstatt verwendet wird 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 

Also warum ist es, dass sha1sumunter nicht ausgeführt werden kann, shsondern shasumarbeitet und sha1sumarbeitet unter bashund wie kann ich sha1sumunter laufen sh?

Ich bin auch verwirrt, warum dies fehlschlägt:

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. 

Ich merke jetzt diesen Kommentar in der /usr/bin/shasumDatei:

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. 
1

2 Antworten auf die Frage

0
WilliamKF

Lösung ist der Link zur Version von shasummit der perlangefügten Version:

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

Oder zu einem Alias ​​dazu:

alias sha1sum=shasum5.18 
Oder Sie könnten mit "uname -s" auf Darwin testen und "shasum5.18" einer Variablen "sha1sum" in Ihrem Skript zuweisen. fd0 vor 8 Jahren 0
@ fd0 Hört sich nach einer besseren Antwort an, warum nicht posten? WilliamKF vor 8 Jahren 0
Ich habe keine klare Vorstellung davon, wie Ihre Skripte in Ihrem Testgerät aussehen. fd0 vor 8 Jahren 0
0
APG
echo "" | $(which shasum 2>/dev/null || which sha1sum 2>/dev/null) 

Ausgabe:

adc83b19e793491b1c6ea0fd8b46cd9f32e592fc - 

unter MacOS / Darwin oder Linux

Bitte erläutern Sie, wie dies die Frage beantwortet. (Ich glaube, Sie haben die Frage falsch verstanden.) Bitte antworten Sie nicht in Kommentaren. Bearbeiten Sie Ihre Antwort, um sie klarer und vollständiger zu machen. Scott vor 6 Jahren 3