¿AppleScript puede mostrar cuándo se ejecutó por última vez un script?

¿Hay alguna forma de que un comando de AppleScript muestre la última vez que se ejecutó? Tengo algunas secuencias de comandos en las que sería útil tener una marca de tiempo de la última vez que se ejecutó para fines de registro. Soy muy verde para la creación de scripts, cualquier idea es bienvenida.

Puede escribir en un archivo de registro: macscripter.net/viewtopic.php?id=24745
@Tetsujin Esa es una excelente idea. Esperaba algún tipo de ventana emergente, pero comenzaré a agregarla de inmediato.
Todas las respuestas a continuación son realmente grandes ideas. Voy a usar un poco de cada uno de ellos, pero marqué el que tiene la ventana emergente del sistema como la respuesta porque es lo más cercano a lo que esperaba que fuera posible. Gracias por toda la ayuda.

Respuestas (3)

Aparte de guardar la información en un archivo de disco separado , o desembolsar para usar una utilidad de línea de comandos , también se puede guardar como un valor dentroproperty del script , preferiblemente guardado como una aplicación . En mi opinión, guardar el valor de a propertydentro del script es lo más fácil desde el punto de vista de la codificación; sin embargo, debido a que el valor se restablece si el código se modifica o vuelve a compilar más tarde, esto puede presentar un inconveniente al usar este método. Solo depende de tus necesidades reales. Dicho esto, y para darte otra opción a elegir:

Ejemplo de código AppleScript :

property lastRunTime : missing value
set lastRunTime to (current date) as string
display notification lastRunTime subtitle "This application was last run:"

Guardé las tres líneas de código como una aplicación llamada Last Run Time y, al ejecutarla, mostró la notificación como:

ingrese la descripción de la imagen aquí

También puede usar el comandodisplay dialog o si no desea usar el comando .display alert display notification


Nota: El código AppleScript de ejemplo es solo eso y no emplea ningún manejo de errores y solo pretende mostrar una de las muchas formas de realizar una tarea. La responsabilidad siempre recae sobre el Usuario para agregar/usar el manejo de errores apropiado según sea necesario/deseado.

Debo admitir que me gusta esta solución y me molesta no haberla pensado. +1
De hecho, consideré esto como una solución. Sin embargo, elegí mi solución porque cubre todas las bases... Mostrar la última vez que se ejecutó... ya sea que se haya iniciado como una aplicación independiente o desde el editor de scripts (incluso después de volver a compilar). Además, con su solución, el script en sí debe ejecutarse solo para obtener el valor de la última vez que se ejecutó. ¿Qué sucede si alguien más ejecutó el script en una computadora compartida y la intención es averiguar cuándo se ejecutó el script por última vez? Con su enfoque, uno necesita abrir el archivo de secuencia de comandos en el editor de secuencias de comandos para intentar recuperar ese valor (si es posible)
@ user3439894 Si hace que la línea "mostrar notificación" de su secuencia de comandos sea la tercera línea en lugar de la segunda, soluciona el problema de "como la primera vez que muestra msng para el valor faltante"
@ wch1zpink, dijiste. "Sin embargo, elegí mi solución porque cubre todas las bases... Mostrar la última vez que se ejecutó... ya sea que se haya iniciado como una aplicación independiente o desde el editor de scripts (incluso después de volver a compilar)", y es exactamente por eso que dije Solo depende de tus necesidades reales. (énfasis añadido) ya que realmente no sabemos cuáles son las verdaderas o reales necesidades del OP en este caso particular. Todos los métodos mencionados hasta ahora tienen sus aplicaciones y usos prácticos y, bajo cualquier circunstancia particular, pueden o no ser una solución aceptable. Sólo depende de las necesidades reales de cada uno.
@wch1zpink, antes de publicar, y solo escribiendo en el Editor de secuencias de comandos, lo tenía de la forma en que lo he editado ahora. Puedo recordar por qué decidí cambiar las dos últimas líneas de código cuando las publiqué por primera vez, pero es un punto discutible ahora que ha sido editado.

Asegúrese de que si cambia el valor de set theFile to "/tmp/script_run_log.txt" -- value can be changed, también debe cambiar el valor de set theLogFile to "Macintosh HD:private:tmp:script_run_log.txt"en el segundo script

-- PLACE THIS FOLLOWING CODE ANYWHERE IN A SCRIPT FILE
-- FOR NEATNESS, CONSIDER PLACING AT SCRIPT BOTTOM
-- THIS CODE WRITES TIME AND DATE OF LAST RUN OF THE SCRIPT OR APP
-- TO A SEPARATE FILE

writeToFile()
on writeToFile()
    set currentDate to (current date) as string
    set theFile to "/tmp/script_run_log.txt" -- value can be changed
    set myName to name of (info for (path to me))
    set theText to myName & " was last run on " & currentDate
    try
        set writeToFile to open for access theFile with write permission
        write theText & linefeed to writeToFile as text starting at eof
        close access theFile
    on error errMsg number errNum
        close access theFile
        set writeToFile to open for access theFile with write permission
        write theText & linefeed to writeToFile starting at eof
        close access theFile
    end try
end writeToFile

Guarde el siguiente código como una aplicación. Cada vez que desee verificar el archivo de registro para ver la última vez que se ejecutó un script específico, simplemente inicie esta aplicación

set theLogFile to "Macintosh HD:private:tmp:script_run_log.txt"
set lastParagraph to paragraphs of (read alias theLogFile) as list

display alert ¬
    theLogFile message item -2 of lastParagraph ¬
    buttons ¬
    "OK" default button ¬
    "OK" giving up after 15

ingrese la descripción de la imagen aquí

Puede recuperar la hora en que se accedió por última vez a cualquier archivo utilizando la herramienta de línea de comandos statcon los siguientes argumentos:

    stat -f "%Sa" -t '%Y-%m-%d %H:%M:%S' /path/to/file
  • -f "%Sa": Esto solicita solo los datos de acceso al archivo, ya que stattambién puede proporcionar otros datos, como horas de modificación, horas de creación, información del dispositivo, datos de propiedad y permisos, etc. Vea man statsi desea saber más sobre las otras capacidades de stat.

  • -t "%Y-%m-%d %H:%M:%S": Esto le dice staten qué formato generar la fecha y la hora. Puede cambiar esto para satisfacer sus necesidades, pero para los fines de esta respuesta, elegí un formato estandarizado que genera esto para uno de mis AppleScripts: 2018-03-31 16:55:42.

Tenga en cuenta que el tiempo de acceso a un archivo AppleScript se actualizará, no solo si se ejecuta, sino también si se lee, se copia o se mueve.

Para usar esto dentro de un AppleScript, puede envolverlo dentro de un do shell script:

    do shell script "stat -f '%Sa' -t '%Y-%m-%d %H:%M:%S' " & ¬
        quoted form of POSIX path of theFileAlias
¡Eso es perfecto! Una pregunta: obtuve el comando para ejecutar en la terminal al hacer un cd en el directorio, pero no puedo ejecutar con una ruta directa porque una carpeta tiene un espacio. Intenté poner \ antes del espacio en la ruta, pero parece que no funciona. ¿Cuál es la forma POSIX de manejar un espacio?
Eso es lo que quoted form ofmaneja: rodea la ruta entre comillas, pero debe usar la ruta completa (es decir, /Users/%you%/path/to/filey no ~/path/to/file). Pero si ha recuperado la POSIX path ofpropiedad, debería estar bien.