##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ## Gestion du fichier crontab ##@cooked nocomments ##@require base uprovide crontab urequire base # Ajouter la ligne $1 au crontab de l'utilisateur $2 # Le code de retour est 123 si la ligne est déjà présente function add_to_crontab() { local -a crontab=(crontab ${2:+-u "$2"}) local current="$("${crontab[@]}" -l 2>/dev/null)" local tmpfile ac_set_tmpfile tmpfile if [ -n "$current" ]; then echo "$current" >"$tmpfile" fi local NL=$'\n' if quietgrep -xF "$1$NL#$1" "$tmpfile"; then ac_clean "$tmpfile" return 123 else echo "$1" >>"$tmpfile" "${crontab[@]}" "$tmpfile" ac_clean "$tmpfile" fi } # Supprimer la ligne $1 du crontab de l'utilisateur $2 # Le code de retour est 123 si la ligne a déjà été supprimée function remove_from_crontab() { local -a crontab=(crontab ${2:+-u "$2"}) local current="$("${crontab[@]}" -l 2>/dev/null)" local tmpfile ac_set_tmpfile tmpfile if [ -n "$current" ]; then echo "$current" >"$tmpfile" fi local NL=$'\n' if ! quietgrep -xF "$1$NL#$1" "$tmpfile"; then ac_clean "$tmpfile" return 123 else grep -vxF "$1$NL#$1" "$tmpfile" | "${crontab[@]}" - ac_clean "$tmpfile" fi } # Désactiver la ligne $1 du crontab de l'utilisateur $2 en mettant '#' devant. Si # la ligne n'existe pas, elle est ajoutée mais commentée. # Le code de retour est 123 si la ligne est déjà désactivée function disable_in_crontab() { local -a crontab=(crontab ${2:+-u "$2"}) local current="$("${crontab[@]}" -l 2>/dev/null)" local tmpfile ac_set_tmpfile tmpfile if [ -n "$current" ]; then echo "$current" >"$tmpfile" fi local NL=$'\n' if ! quietgrep -xF "$1$NL#$1" "$tmpfile"; then echo "#$1" >>"$tmpfile" "${crontab[@]}" "$tmpfile" elif quietgrep -xF "#$1" "$tmpfile"; then ac_clean "$tmpfile" return 123 else <"$tmpfile" awkrun line="$1" '$0 == line { $0 = "#" $0 } { print }' | "${crontab[@]}" - ac_clean "$tmpfile" fi } # Activer la ligne $1 du crontab de l'utilisateur $2 en enlevant '#' devant. Si # la ligne n'existe pas, elle est ajoutée. # Le code de retour est 123 si la ligne est déjà activée function enable_in_crontab() { local -a crontab=(crontab ${2:+-u "$2"}) local current="$("${crontab[@]}" -l 2>/dev/null)" local tmpfile ac_set_tmpfile tmpfile if [ -n "$current" ]; then echo "$current" >"$tmpfile" fi local NL=$'\n' if ! quietgrep -xF "$1$NL#$1" "$tmpfile"; then echo "$1" >>"$tmpfile" "${crontab[@]}" "$tmpfile" elif quietgrep -xF "$1" "$tmpfile"; then ac_clean "$tmpfile" return 123 else <"$tmpfile" awkrun line="$1" '$0 == "#" line { sub(/^#/, "") } { print }' | "${crontab[@]}" - ac_clean "$tmpfile" fi } # Afficher la spécification crontab correspondant à l'heure courante function ctnow() { date +"%-M %-H %-d %-m %u" } __CTRESOLVE_CTNOW="" # Analyser STDIN qui contient des lignes au format crontab, et afficher des # commandes pour les lignes correspondant à la date courante. # Les commandes sont de la forme "export var=value" pour la définition d'une # variable, "__ctexec 'cmd'" pour exécuter la commande correspondante ou # "__cterror 'msg'" en cas d'erreur de syntaxe sur une ligne. Il faut bien # entendu définir les function __ctexec et __cterror. # Cette fonction s'utilise de cette manière: # function __ctexec() { eval "$*"; } # function __cterror() { die "$*"; } # eval "$(ctresolve