Ich lasse mein eigenes Skript laufen, um Datenbanken nächtlich in Dateien zu speichern.
Ich wollte die Zeit (in Sekunden) zählen, die benötigt wird, um jede Datenbank abzulegen, also habe ich versucht, einige Funktionen zu schreiben, um mir dabei zu helfen, aber ich habe Probleme.
Ich bin kein Experte für Skripting in bash, also wenn ich es falsch mache, sag es einfach und schlage idealerweise eine Alternative vor, bitte.
Hier ist das Skript:
%Vor% Der Code sollte wirklich selbsterklärend sein. echo
-Befehle dienen nur zum Debuggen.
Ich erwarte, dass die Ausgabe ungefähr so aussieht:
Das ist jetzt leider nicht der Fall. Was ich bekomme ist:
%Vor% Wie Sie sehen, ist der Wert, den local var time_curr
vom Befehl erhält, ein gültiger Zeitstempel, aber wenn dieser Wert zurückgegeben wird, wird er in eine Ganzzahl zwischen 0 und 255 geändert.
Kann mir bitte jemand erklären, warum das passiert?
PS. Dies ist offensichtlich nur mein Timer-Testskript ohne irgendeine andere Logik.
UPDATE Um ganz klar zu sein, möchte ich, dass dies Teil eines Bash-Skripts ist, der sehr ähnlich zu this one , wo ich jeden Schleifenzyklus messen möchte.
Außer natürlich, ich kann es mit time
machen, dann schlagen Sie bitte eine Lösung vor.
$?
wird verwendet, um den Exit-Status eines Befehls zu halten und kann nur einen Wert zwischen 0 und 255 enthalten. Wenn Sie einen Exit-Code außerhalb dieses Bereichs übergeben (z. B. in einem C-Programm, das exit(-1)
aufruft) Shell erhält immer noch einen Wert in diesem Bereich und setzt $?
entsprechend.
Als Workaround könnten Sie einfach einen anderen Wert in Ihrer bash-Funktion festlegen:
%Vor% Sie müssen das alles nicht machen. Führen Sie einfach time <yourscript>
in der Shell aus.
Ich glaube, Sie sollten in der Lage sein, die vorhandene "Zeit" -Funktion zu verwenden.
Nach Update auf die Frage: Das war das bisschen Skript von Ihrem Link, der eine for-Schleife machte.
%Vor% Sie könnten den inneren Teil der Schleife in ein neues Skript extrahieren (nennen Sie es dump_one_db.sh
)
und mache das in der Schleife:
Stellen Sie sicher, dass Sie die Ausgabe der Uhrzeit mit dem Datenbanknamen in eine Datei schreiben.
Dies passiert, weil Rückkehrcodes zwischen 0 und 255 liegen müssen. Sie können keine beliebige Zahl zurückgeben. Wenn Sie weiterhin die Verwendung der integrierten time
-Funktion verweigern und eigene Rollen erstellen, ändern Sie Ihre Funktionen so, dass sie ihren Stempel zurückgeben und eine Prozesserweiterung ( $()
) verwenden, um den Wert zu erfassen.