Necesito escribir un script que escriba en un archivo cuántas veces se ha ejecutado este script.
¿Cómo puedo hacer eso?
command-line
bash
scripts
Milen Grigorov
fuente
fuente
echo $(( $(cat countfile 2>/dev/null || echo 0) + 1 )) > countfile
$(…)
se ejecute antes que nada (especialmente antes del>
). Pero a menudo uso la$(cat countfile 2>/dev/null || echo 0)
parte para obtener un valor predeterminado razonable en caso de que el archivo no exista. Podríamos agregar unsponge
:-) para estar seguro.flock
comando para evitar condiciones de carrera. Ver unix.stackexchange.com/a/409276Simplemente deje que el script cree un archivo de registro, agregue, por ejemplo, una línea en su script al final:
De esta forma, puede formatear la fecha y la hora usted mismo, pero si simplemente desea ir con una fecha y hora completas (y
HH:MM:SS
es un formato aceptable para usted), también puede simplemente usar:Entonces podrías hacer:
Que cuenta los caracteres de nueva línea y le da una estimación de cuántas líneas hay dentro del archivo de registro. Hasta eso puede ver dentro del archivo de registro incluso cuando se ejecutó. Para adaptarlo a sus necesidades, puede cambiar las rutas y los nombres utilizados para iniciar sesión. Acabo de hacer un ejemplo aquí que guarda el archivo de registro
~
.Entonces, por ejemplo, si desea que el script agregue este conteo a la línea que agregó al final de su script, podría hacer algo como esto al comienzo de su script:
Y cambie su línea al final del guión a algo que incluya incluso esa información:
fuente
Esta solución utiliza el mismo enfoque que la respuesta de Byte Commander, pero no se basa en aritmética de shell u otros Bashismos.
Las redirecciones de flujo
/dev/null
(para suprimir el mensaje de error en la redirección posterior de la entrada delread
comando si el archivo del contador falta)fuente
Un enfoque diferente
Un archivo de contador separado tiene desventajas:
¡Entonces esta respuesta elimina un archivo de contador separado y coloca el conteo en el script bash mismo!
flock
garantiza que por un breve momento no es posible que dos usuarios ejecuten el script al mismo tiempo.El código
Otro enfoque utilizando un archivo de registro
Similar a la respuesta de Videonauth, escribí una respuesta de archivo de registro aquí: secuencia de comandos Bash para mantener el seguimiento / registro de auditoría de los archivos accedidos para registrar cada vez que se usaban poderes de raíz con
gedit
onautilus
.Sin embargo, el problema es que en lugar de usar
gksu
el script se nombragsu
e invocapkexec
la forma "moderna" de usar sudo en la GUI, por lo que me han dicho.Otra ventaja es que no solo dice cada vez que se usaron poderes de raíz,
gedit
sino que registra el nombre del archivo que se editó. Aquí está el código.~/bin/gsu
:/usr/local/bin/log-file
:Contenido del archivo de registro
gsu-log-file-for-gedit
después de algunas ediciones:fuente