Ich gehe davon aus, dass Sie eine einzelne Datei haben möchten, die countfile
nur eine einzige Nummer enthält, die den Ausführungszähler darstellt.
Sie können diesen Zähler in eine Shell-Variable einlesen, $counter
z. B. mit einer der folgenden Zeilen:
read counter < countfile
counter=$(cat countfile)
Einfache Ganzzahladditionen können in Bash selbst mithilfe der $(( EXPRESSION ))
Syntax vorgenommen werden. Dann schreiben Sie einfach das Ergebnis zurück an countfile
:
echo "$(( counter + 1 ))" > countfile
Sie sollten Ihr Skript wahrscheinlich auch für den Fall schützen, der countfile
noch nicht vorhanden ist, und dann ein Skript erstellen, das mit dem Wert 1 initialisiert wurde.
Das Ganze könnte so aussehen:
#!/bin/bash
if [[ -f countfile ]] ; then
read counter < countfile
else
counter=0
fi
echo "$(( counter + 1 ))" > countfile
echo $(( $(cat countfile 2>/dev/null || echo 0) + 1 )) > countfile
$(…)
vor irgendetwas anderem ausgeführt wird (besonders vor dem>
). Aber ich benutze das$(cat countfile 2>/dev/null || echo 0)
Teil oft , um einen vernünftigen Standard zu erhalten, falls die Datei nicht existiert. Wir könnten einsponge
:-) hinzufügen , um sicher zu gehen.flock
Befehl eingeschlossen wird, um Rennbedingungen zu verhindern. Siehe unix.stackexchange.com/a/409276Lassen Sie das Skript einfach eine Protokolldatei erstellen und fügen Sie am Ende beispielsweise eine Zeile in Ihr Skript ein:
Auf diese Weise können Sie die Darstellung von Datum und Uhrzeit selbst formatieren. Wenn Sie jedoch nur ein vollständiges Datum und eine vollständige Uhrzeit verwenden möchten (und
HH:MM:SS
ein für Sie akzeptables Format haben), können Sie auch einfach Folgendes verwenden:Dann könnten Sie tun:
Dies zählt die Zeilenumbruchzeichen und gibt Ihnen eine Schätzung, wie viele Zeilen sich in der Protokolldatei befinden. Bis dahin können Sie in der Protokolldatei sehen, auch wenn sie ausgeführt wurde. Um es an Ihre Bedürfnisse anzupassen, können Sie die Pfade und Namen ändern, die für die Protokollierung verwendet werden. Ich habe hier nur ein Beispiel gemacht, in dem die Protokolldatei gespeichert wird
~
.Wenn Sie beispielsweise möchten, dass das Skript diese Anzahl zu der Zeile hinzufügt, die Sie am Ende Ihres Skripts hinzugefügt haben, können Sie am Anfang Ihres Skripts Folgendes tun:
Und ändern Sie Ihre Zeile am Ende des Skripts in etwas, das auch diese Informationen enthält:
quelle
Diese Lösung verwendet den gleichen Ansatz wie die Antwort von Byte Commander, basiert jedoch nicht auf Shell-Arithmetik oder anderen Bashismen.
Die Stream-Umleitungen
/dev/null
(um die Fehlermeldung bei der nachfolgenden Umleitung derread
Befehlseingabe zu unterdrücken, wenn die Zählerdatei erwartungsgemäß fehlt).quelle
Ein anderer Versuch
Eine separate Zählerdatei hat Nachteile:
Diese Antwort beseitigt also eine separate Zählerdatei und fügt die Zählung in das Bash-Skript selbst ein!
flock
garantiert, dass es für einen kurzen Moment nicht möglich ist, dass zwei Benutzer das Skript gleichzeitig ausführen.Der Code
Ein anderer Ansatz unter Verwendung einer Protokolldatei
Ähnlich wie bei Videonauths Antwort habe ich hier eine Antwort auf eine Protokolldatei geschrieben: Bash-Skript zum Verwalten des Prüfpfads / Protokolls von Dateien, auf die jedes Mal zugegriffen wird , wenn bei
gedit
oder mit Root-Potenzen mit oder protokolliert wirdnautilus
.Der Haken ist jedoch, anstatt
gksu
das Skript zu verwenden, benannt zu seingsu
undpkexec
die "moderne" Art der Verwendung von sudo in der GUI aufzurufen, so wird mir gesagt.Ein weiterer Vorteil ist, dass nicht nur jedes Mal angegeben wird, wenn Root-Kräfte verwendet wurden,
gedit
sondern auch der bearbeitete Dateiname protokolliert wird. Hier ist der Code.~/bin/gsu
::/usr/local/bin/log-file
::Inhalt der Protokolldatei
gsu-log-file-for-gedit
nach einigen Änderungen:quelle