J'ai besoin d'écrire un script qui écrit dans un fichier combien de fois ce script a été exécuté.
Comment puis je faire ça?
command-line
bash
scripts
Milen Grigorov
la source
la source
echo $(( $(cat countfile 2>/dev/null || echo 0) + 1 )) > countfile
$(…)
soit exécuté avant toute autre chose (en particulier avant le>
). Mais j'utilise souvent la$(cat countfile 2>/dev/null || echo 0)
pièce pour obtenir un défaut raisonnable au cas où le fichier n'existe pas. Nous pourrions ajouter unsponge
:-) pour être sûr.flock
commande pour éviter les conditions de concurrence. Voir unix.stackexchange.com/a/409276Laissez simplement le script créer un fichier journal, ajoutez par exemple une ligne dans votre script à la fin:
De cette façon, vous pouvez formater la façon dont vous présentez la date et l'heure vous-même, mais si vous voulez simplement utiliser une date et une heure complètes (et
HH:MM:SS
c'est un format acceptable pour vous), vous pouvez également utiliser simplement:Ensuite, vous pourriez faire:
Qui compte les caractères de nouvelle ligne et vous donne une estimation du nombre de lignes à l'intérieur du fichier journal. Jusqu'à cela, vous pouvez voir dans le fichier journal même lorsqu'il a été exécuté. Pour l'adapter à vos besoins, vous pouvez modifier les chemins et les noms utilisés pour la journalisation. Je viens de faire un exemple ici qui enregistre le fichier journal
~
.Ainsi, par exemple, vous voulez que le script ajoute ce nombre à la ligne que vous avez ajoutée à la fin de votre script, vous pouvez faire quelque chose comme ceci au début de votre script:
Et changez votre ligne à la fin du script en quelque chose incluant même ces informations:
la source
Cette solution utilise la même approche que la réponse de Byte Commander, mais elle ne repose pas sur l'arithmétique du shell ou d'autres bashismes.
Les redirections de flux
/dev/null
(pour supprimer le message d'erreur lors de la redirection ultérieure de l'entrée de laread
commande si le fichier de compteur est manquant),la source
Une approche différente
Un fichier de compteur séparé présente des inconvénients:
Cette réponse supprime donc un fichier de compteur séparé et place le nombre dans le script bash lui-même!
flock
garantit que pendant un bref instant, il n'est pas possible pour deux utilisateurs d'exécuter le script en même temps.Le code
Une autre approche à l'aide d'un fichier journal
Semblable à la réponse de Videonauth, j'ai écrit une réponse de fichier journal ici: Script Bash pour maintenir la piste d'audit / journal des fichiers accessibles pour se connecter chaque fois que les pouvoirs root ont été utilisés avec
gedit
ounautilus
.Le hic est que plutôt que d'utiliser
gksu
le script est nommégsu
et invoquepkexec
la façon "moderne" d'utiliser sudo dans l'interface graphique, donc on me dit.Un autre avantage est non seulement de dire à chaque fois que les pouvoirs root ont été utilisés,
gedit
mais il enregistre le nom de fichier qui a été modifié. Voici le code.~/bin/gsu
:/usr/local/bin/log-file
:Contenu du fichier journal
gsu-log-file-for-gedit
après quelques modifications:la source