Was ist der Unterschied zwischen dem Schreiben einer Datei mit einem Editor wie vim/nano und der Ausgabeumleitung in der Shell?

Was ist der Unterschied zwischen dem Schreiben einer Datei mit einem Editor wie vim/nano und der Ausgabeumleitung in der Shell?

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

verwandte Informationen