
Ich verwende macOS mitSCHLUCKaktiviert. Und ich bin gerade dabei herauszufinden, warum die Skripte mit dem SIP nach einer Änderung oder Erstellung so langsam laufen.
Und ich habe festgestellt, dass es, wenn ich ein Skript mit Editoren wie vim oder nano ändere und es ausführe ./script.bash
, nach jeder Änderung etwa 1 Sekunde dauert, bis das Skript zum ersten Mal beendet wird.
Beispiel: Wenn script.bash lautet:
#!/bin/bash
echo 1
Und ich ändere es auf unten um vim
. Ich brauche ungefähr zehnmal so lange, um es auszuführen.
#!/bin/bash
echo 1
echo 2
bash-3.2$ time ./script.bash # First time after modification by vim
1
2
real 0m0.884s
user 0m0.001s
sys 0m0.002s
bash-3.2$ time ./script.bash # Second time after modification by vim
1
2
real 0m0.003s
user 0m0.001s
sys 0m0.002s
Wenn ich die Datei derzeit jedoch durch die Ausgabeumleitung eines Befehls anhänge echo "echo 3" >> script.bash
und das Skript weiterhin aufrufe ./script.bash
, ist die Verzögerung verschwunden.
bash-3.2$ echo "echo 3" >> script.bash
bash-3.2$ time ./script.bash # First time after modification by echo
1
2
3
real 0m0.004s
user 0m0.001s
sys 0m0.002s
bash-3.2$ time ./script.bash # Second time after modification by echo
1
2
3
real 0m0.002s
user 0m0.001s
sys 0m0.001s
Was ist also der Unterschied zwischen den beiden Möglichkeiten, eine Datei zu schreiben? Und warum tritt die Verzögerung nur auf beiSCHLUCKermöglicht?
Antwort1
ich fandDieser Artikelwas meiner Meinung nach Ihr Problem erklärt.
Apple hat die Notarisierung eingeführt. Abgesehen von den Unannehmlichkeiten, die dies für uns Entwickler mit sich bringt, führt es auch zu einer Verschlechterung der Benutzererfahrung, da Apple die Ausführung verzögert, wenn ein Benutzer zum ersten Mal eine neue ausführbare Datei ausführt, während es auf eine Antwort von seinem Server wartet. Diese Überprüfung dauert bei mir fast eine Sekunde.
Dies gilt nicht nur für aus dem Internet heruntergeladene Dateien und auch nicht nur, wenn Sie sie über den Finder starten, sondern für alles. Selbst wenn Sie also ein einzeiliges Shell-Skript schreiben und es in einem Terminal ausführen, kommt es zu einer Verzögerung!
Was die Beglaubigungsprüfung betrifft, wird das Ergebnis zwischengespeichert, sodass der zweite Aufruf schnell erfolgen sollte. Wenn Sie jedoch Entwickler sind, aktualisieren Sie Ihre Skripts und Binärdateien möglicherweise regelmäßig, wodurch neue Prüfungen ausgelöst werden (die Zwischenspeicherung scheint auf Inodes zu basieren, sodass eine Speicherung vor Ort durchgeführter Aktualisierung möglicherweise das Auslösen einer neuen Prüfung vermeidet), oder Sie verfügen möglicherweise über Arbeitsabläufe, bei denen Skripts dynamisch erstellt und ausgeführt werden, wobei die Leistung nun von der Reaktionsfähigkeit der Apple-Server abhängt.
Es scheint, dass das Ändern der Datei mit einem Editor den Inode ändert und ihn erneut prüft. Das Anhängen einer Umleitung führt jedoch nicht dazu.