Programe el script bash para un uso único en OSX

Programe el script bash para un uso único en OSX

Estoy intentando hacer un pequeño script que, como función, tomará un archivo y una fecha como entrada y eliminará ese archivo en la fecha especificada. Así que sólo necesito programarlo para que se ejecute una vez y listo.

Estoy en OSX y he estado mirandoen, pero no solo he tenido problemas para crear scripts, sino que tengo entendido (he estado investigando todo el día) que servicios como aty cronquedarán obsoletos en OSX en favor de launchd.

Por lo que he visto, Launchd no sólo es demasiado complicado para esto, sino que parece que no puedo entender cómo usarlo pararealizar una acción única en una fecha y hora específicas(que es realmente todo lo que necesito).

Me gustaría recibir ayuda con esto, por favor. Prefiero no usaren, e idealmente es una solución que no requerirá que el usuario instale cosas adicionales. También debe ser programable (es decir, línea de comando). Si tengo que usar launchd, que así sea, pero realmente necesita poder usar una hora y fecha específicas.

Respuesta1

Seguro que cron y at están en desuso, pero probablemente no vayan a ninguna parte (incluso si lo hicieran, no debería ser difícil reinstalarlos).

Si realmente quisiera hacer eso con launchd, tendría que guardar y cargar una lista de propiedades en el primer script y luego descargarla y eliminarla en el segundo script.

#!/bin/bash

month=6
day=1
hour=18
minute=0
label=com.superuser.431145
agent=~/Library/LaunchAgents/$label.plist

plist="<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version=\"1.0\">
<dict>
<key>Label</key>
<string>$label</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/script</string>
</array>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Month</key>
<integer>$month</integer>
<key>Day</key>
<integer>$day</integer>
<key>Hour</key>
<integer>$hour</integer>
<key>Minute</key>
<integer>$minute</integer>
</dict>
</array>
</dict>
</plist>"

echo "$plist" > $agent
launchctl unload $agent 2> /dev/null
launchctl load $agent

El segundo guión podría verse así:

plist=~/Library/LaunchAgents/com.superuser.431145.plist
launchctl unload $plist
rm $plist
rm ~/Desktop/test

Si usó at, primero deberá habilitarlo con sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist. Aquí hay algunos ejemplos copiados de mi sitio web:

echo 'say test' | at now+5 # +5 and +5 seconds don't work
echo 'say test' | at +1 minute # +1 minutes results in an error
echo 'say test' | at +2 hours
echo say test > test.txt; at -f test.txt now+5
atq # at -l; list at queue
atrm 14 # at -d 14
atrm {1..9999} # remove all jobs

información relacionada