Intégration de la branche release-2.18.0
This commit is contained in:
		
						commit
						abe87b47ec
					
				@ -1,3 +1,10 @@
 | 
				
			|||||||
 | 
					## Version 2.18.0 du 27/10/2015-12:05
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					434403a Intégration de la branche uscrontab
 | 
				
			||||||
 | 
					2118885 uscrontab: possibilité de mettre en pause sans modifier les planifications en cours
 | 
				
			||||||
 | 
					0eeee20 awkrun: renommer les fonctions quote_*
 | 
				
			||||||
 | 
					18691c8 upassword: maj doc et support des commentaires pour le mode batch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Version 2.17.2 du 26/09/2015-12:25
 | 
					## Version 2.17.2 du 26/09/2015-12:25
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1837a0c pxs: corriger xget, xcopy, xmove pour utiliser directement git annex sync
 | 
					1837a0c pxs: corriger xget, xcopy, xmove pour utiliser directement git annex sync
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1 @@
 | 
				
			|||||||
2.17.2
 | 
					2.18.0
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1 @@
 | 
				
			|||||||
009004000
 | 
					009005000
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										55
									
								
								lib/ulib/awk
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								lib/ulib/awk
									
									
									
									
									
								
							@ -28,33 +28,68 @@ pour un tableau values qui contiendra deux valeurs: value1 et value2
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Les fonctions suivantes sont définies:
 | 
					Les fonctions suivantes sont définies:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
quote_value(s)
 | 
					num(s)
 | 
				
			||||||
    quoter une valeur pour le shell. la valeur est entourée de quotes, e.g:
 | 
					    si s ne contient que des chiffres, retourner la valeur numérique associée,
 | 
				
			||||||
        quote_value(\"here, \\\"there\\\" and 'everywhere'.\")
 | 
					    sinon retournée la valeur inchangée
 | 
				
			||||||
        --> 'here, \"there\" and '\\''everywhere'\\''.'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
quoted_values()
 | 
					ord(s)
 | 
				
			||||||
 | 
					    retourner le code ASCII du premier caractère de la chaine s. seuls les codes
 | 
				
			||||||
 | 
					    de 32 à 127 sont supportés
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hex(i)
 | 
				
			||||||
 | 
					    retourner la représentation hexadécimale du nombre i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					qhtml(s)
 | 
				
			||||||
 | 
					    remplacer respectivement dans la chaine s les valeurs &, \", > et < par
 | 
				
			||||||
 | 
					    &, ", > et <
 | 
				
			||||||
 | 
					    L'alias quote_html(s) existe pour compatibilité
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unquote_html(s)
 | 
				
			||||||
 | 
					    faire le contraire de qhtml(s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					qval(s)
 | 
				
			||||||
 | 
					    quoter une valeur pour le shell. la valeur est entourée de quotes, e.g:
 | 
				
			||||||
 | 
					        qval(\"here, \\\"there\\\" and 'everywhere'.\")
 | 
				
			||||||
 | 
					        --> 'here, \"there\" and '\\''everywhere'\\''.'
 | 
				
			||||||
 | 
					    L'alias quote_value(s) existe pour compatibilité
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					qsval(s)
 | 
				
			||||||
 | 
					    comme qval() mais ajouter un espace avant la valeur quotée. ceci permet de
 | 
				
			||||||
 | 
					    construire facilement une ligne de commande, e.g.:
 | 
				
			||||||
 | 
					        print \"mycmd\" qsval(arg1) qsval(arg2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					qvals()
 | 
				
			||||||
    quoter les valeurs \$1..\$NF pour les passer comme argument sur la ligne de
 | 
					    quoter les valeurs \$1..\$NF pour les passer comme argument sur la ligne de
 | 
				
			||||||
    commande avec eval. e.g.:
 | 
					    commande avec eval. e.g.:
 | 
				
			||||||
        print \"mycmd \" quoted_values()
 | 
					        print \"mycmd \" qvals()
 | 
				
			||||||
    La ligne qui est affichée pourra être évaluée avec eval dans le shell.
 | 
					    La ligne qui est affichée pourra être évaluée avec eval dans le shell.
 | 
				
			||||||
 | 
					    L'alias quoted_values(s) existe pour compatibilité
 | 
				
			||||||
 | 
					
 | 
				
			||||||
quote_subrepl(s)
 | 
					qsvals(s)
 | 
				
			||||||
 | 
					    comme qvals() mais ajouter un espace avant la valeur quotée. ceci permet de
 | 
				
			||||||
 | 
					    construire facilement une ligne de commande, e.g.:
 | 
				
			||||||
 | 
					        print \"mycmd\" qsvals()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					qsubrepl(s)
 | 
				
			||||||
    quoter une valeur pour l'argument r des fonctions sub() et gsub(). Les
 | 
					    quoter une valeur pour l'argument r des fonctions sub() et gsub(). Les
 | 
				
			||||||
    caractères suivants sont mis en échappement: \\ &
 | 
					    caractères suivants sont mis en échappement: \\ &
 | 
				
			||||||
 | 
					    L'alias quote_subrepl(s) existe pour compatibilité
 | 
				
			||||||
 | 
					
 | 
				
			||||||
quote_grep(s)
 | 
					qgrep(s)
 | 
				
			||||||
    quoter une valeur pour un pattern *simple* de grep. Les caractères suivants
 | 
					    quoter une valeur pour un pattern *simple* de grep. Les caractères suivants
 | 
				
			||||||
    sont mis en échappement: \\ . [ ^ \$ *
 | 
					    sont mis en échappement: \\ . [ ^ \$ *
 | 
				
			||||||
 | 
					    L'alias quote_grep(s) existe pour compatibilité
 | 
				
			||||||
 | 
					
 | 
				
			||||||
quote_egrep(s)
 | 
					qegrep(s)
 | 
				
			||||||
    quoter une valeur pour un pattern *étendu* de grep. Les caractères suivants
 | 
					    quoter une valeur pour un pattern *étendu* de grep. Les caractères suivants
 | 
				
			||||||
    sont mis en échappement: \\ . [ ^ \$ ? + * ( ) | {
 | 
					    sont mis en échappement: \\ . [ ^ \$ ? + * ( ) | {
 | 
				
			||||||
 | 
					    L'alias quote_egrep(s) existe pour compatibilité
 | 
				
			||||||
 | 
					
 | 
				
			||||||
quote_sql(s)
 | 
					qsql(s)
 | 
				
			||||||
    quoter une valeur pour un script sql. la valeur est entourée de quotes, e.g:
 | 
					    quoter une valeur pour un script sql. la valeur est entourée de quotes, e.g:
 | 
				
			||||||
        quote_sql(\"hello'there\")
 | 
					        quote_sql(\"hello'there\")
 | 
				
			||||||
        --> 'hello''there'
 | 
					        --> 'hello''there'
 | 
				
			||||||
 | 
					    L'alias quote_sql(s) existe pour compatibilité
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unquote_mysqlcsv(s)
 | 
					unquote_mysqlcsv(s)
 | 
				
			||||||
    Analyser une valeur exportée de MySQL avec mysqlcsv. Les transformations
 | 
					    Analyser une valeur exportée de MySQL avec mysqlcsv. Les transformations
 | 
				
			||||||
 | 
				
			|||||||
@ -1848,13 +1848,14 @@ function hex(i,    s) {
 | 
				
			|||||||
  if (length(s) < 2) s = "0" s
 | 
					  if (length(s) < 2) s = "0" s
 | 
				
			||||||
  return s
 | 
					  return s
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function quote_html(s) {
 | 
					function qhtml(s) {
 | 
				
			||||||
  gsub(/&/, "\\&", s)
 | 
					  gsub(/&/, "\\&", s)
 | 
				
			||||||
  gsub(/"/, "\\"", s)
 | 
					  gsub(/"/, "\\"", s)
 | 
				
			||||||
  gsub(/>/, "\\>", s)
 | 
					  gsub(/>/, "\\>", s)
 | 
				
			||||||
  gsub(/</, "\\<", s)
 | 
					  gsub(/</, "\\<", s)
 | 
				
			||||||
  return s
 | 
					  return s
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					function quote_html(s) { return qhtml(s) }
 | 
				
			||||||
function unquote_html(s) {
 | 
					function unquote_html(s) {
 | 
				
			||||||
  gsub(/</, "<", s)
 | 
					  gsub(/</, "<", s)
 | 
				
			||||||
  gsub(/>/, ">", s)
 | 
					  gsub(/>/, ">", s)
 | 
				
			||||||
@ -1862,11 +1863,15 @@ function unquote_html(s) {
 | 
				
			|||||||
  gsub(/&/, "\\&", s)
 | 
					  gsub(/&/, "\\&", s)
 | 
				
			||||||
  return s
 | 
					  return s
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function quote_value(s) {'"
 | 
					function qval(s) {'"
 | 
				
			||||||
  gsub(/'/, \"'\\\\''\", s)
 | 
					  gsub(/'/, \"'\\\\''\", s)
 | 
				
			||||||
  return \"'\" s \"'\"
 | 
					  return \"'\" s \"'\"
 | 
				
			||||||
"'}
 | 
					"'}
 | 
				
			||||||
function quoted_values(             i, line) {
 | 
					function quote_value(s) { return qval(s) }
 | 
				
			||||||
 | 
					function qsval(s) {
 | 
				
			||||||
 | 
					  return " " qval(s)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					function qvals(             i, line) {
 | 
				
			||||||
  line = ""
 | 
					  line = ""
 | 
				
			||||||
  for (i = 1; i <= NF; i++) {
 | 
					  for (i = 1; i <= NF; i++) {
 | 
				
			||||||
    if (i > 1) line = line " "
 | 
					    if (i > 1) line = line " "
 | 
				
			||||||
@ -1874,27 +1879,36 @@ function quoted_values(             i, line) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  return line
 | 
					  return line
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function quote_regexp(s) {
 | 
					function quoted_values() { return qvals() }
 | 
				
			||||||
 | 
					function qsvals() {
 | 
				
			||||||
 | 
					  return " " qvals()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					function qregexp(s) {
 | 
				
			||||||
  gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
 | 
					  gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
 | 
				
			||||||
  return s
 | 
					  return s
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function quote_subrepl(s) {
 | 
					function quote_regexp(s) { return qregexp(s) }
 | 
				
			||||||
 | 
					function qsubrepl(s) {
 | 
				
			||||||
  gsub(/\\/, "\\\\", s)
 | 
					  gsub(/\\/, "\\\\", s)
 | 
				
			||||||
  gsub(/&/, "\\\\&", s)
 | 
					  gsub(/&/, "\\\\&", s)
 | 
				
			||||||
  return s
 | 
					  return s
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function quote_grep(s) {
 | 
					function quote_subrepl(s) { return qsubrepl(s) }
 | 
				
			||||||
 | 
					function qgrep(s) {
 | 
				
			||||||
  gsub(/[[\\.^$*]/, "\\\\&", s)
 | 
					  gsub(/[[\\.^$*]/, "\\\\&", s)
 | 
				
			||||||
  return s
 | 
					  return s
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function quote_egrep(s) {
 | 
					function quote_grep(s) { return qgrep(s) }
 | 
				
			||||||
 | 
					function qegrep(s) {
 | 
				
			||||||
  gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
 | 
					  gsub(/[[\\.^$*+?()|{]/, "\\\\&", s)
 | 
				
			||||||
  return s
 | 
					  return s
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function quote_sql(s) {'"
 | 
					function quote_egrep(s) { return qegrep(s) }
 | 
				
			||||||
 | 
					function qsql(s) {'"
 | 
				
			||||||
  gsub(/'/, \"''\", s)
 | 
					  gsub(/'/, \"''\", s)
 | 
				
			||||||
  return \"'\" s \"'\"
 | 
					  return \"'\" s \"'\"
 | 
				
			||||||
"'}
 | 
					"'}
 | 
				
			||||||
 | 
					function quote_sql(s) { return qsql(s) }
 | 
				
			||||||
function unquote_mysqlcsv(s) {
 | 
					function unquote_mysqlcsv(s) {
 | 
				
			||||||
  gsub(/\\n/, "\n", s)
 | 
					  gsub(/\\n/, "\n", s)
 | 
				
			||||||
  gsub(/\\t/, "\t", s)
 | 
					  gsub(/\\t/, "\t", s)
 | 
				
			||||||
 | 
				
			|||||||
@ -92,7 +92,12 @@ function enable_in_crontab() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
# Afficher la spécification crontab correspondant à l'heure courante
 | 
					# Afficher la spécification crontab correspondant à l'heure courante
 | 
				
			||||||
function ctnow() {
 | 
					function ctnow() {
 | 
				
			||||||
    date +"%-M %-H %-d %-m %u"
 | 
					    #date +"%-M %-H %-d %-m %u"
 | 
				
			||||||
 | 
					    if [ -n "$1" ]; then
 | 
				
			||||||
 | 
					        echo "$1" | awk '{ print strftime("%-M %-H %-d %-m %u", $0) }'
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        awk 'BEGIN { print strftime("%-M %-H %-d %-m %u", systime()) }'
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
__CTRESOLVE_CTNOW=""
 | 
					__CTRESOLVE_CTNOW=""
 | 
				
			||||||
# Analyser STDIN qui contient des lignes au format crontab, et afficher des
 | 
					# Analyser STDIN qui contient des lignes au format crontab, et afficher des
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										43
									
								
								upassword
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								upassword
									
									
									
									
									
								
							@ -4868,6 +4868,7 @@ public class upassword {
 | 
				
			|||||||
                    + "\n    upassword -f aeskeyfile -s"
 | 
					                    + "\n    upassword -f aeskeyfile -s"
 | 
				
			||||||
                    + "\n    upassword -f aeskeyfile -e clear"
 | 
					                    + "\n    upassword -f aeskeyfile -e clear"
 | 
				
			||||||
                    + "\n    upassword -f aeskeyfile -d crypted"
 | 
					                    + "\n    upassword -f aeskeyfile -d crypted"
 | 
				
			||||||
 | 
					                    + "\n    upassword --batch"
 | 
				
			||||||
                    + "\n\nOPTIONS"
 | 
					                    + "\n\nOPTIONS"
 | 
				
			||||||
                    + "\n    -p, --hash-password"
 | 
					                    + "\n    -p, --hash-password"
 | 
				
			||||||
                    + "\n        Crypter un mot de passe (option par défaut). Si le mot de passe en clair"
 | 
					                    + "\n        Crypter un mot de passe (option par défaut). Si le mot de passe en clair"
 | 
				
			||||||
@ -4890,7 +4891,32 @@ public class upassword {
 | 
				
			|||||||
                    + "\n        Spécifier le fichier contenant la clé AES. Cette option est obligatoire"
 | 
					                    + "\n        Spécifier le fichier contenant la clé AES. Cette option est obligatoire"
 | 
				
			||||||
                    + "\n        avec les options -G, -s, -e et -d"
 | 
					                    + "\n        avec les options -G, -s, -e et -d"
 | 
				
			||||||
                    + "\n    --shell"
 | 
					                    + "\n    --shell"
 | 
				
			||||||
                    + "\n        Afficher les valeurs pour évaluation par le shell");
 | 
					                    + "\n        Afficher les valeurs pour évaluation par le shell"
 | 
				
			||||||
 | 
					                    + "\n\nMODE BATCH"
 | 
				
			||||||
 | 
					                    + "\nUtiliser l'option --batch active le mode batch. Dans ce mode, chaque ligne est"
 | 
				
			||||||
 | 
					                    + "\nun ensemble d'arguments, comme si on avait lancé le script à plusieurs reprises."
 | 
				
			||||||
 | 
					                    + "\nL'analyseur est limité: le découpage des arguments est fait sur les espaces."
 | 
				
			||||||
 | 
					                    + "\nLes lignes commençant par # sont ignorées."
 | 
				
			||||||
 | 
					                    + "\nSi une ligne commence par --batch-after, alors cette ligne est affichée après"
 | 
				
			||||||
 | 
					                    + "\nchaque résultat. Ceci permet de générer un script qui peut être évalué."
 | 
				
			||||||
 | 
					                    + "\n\nVoici un exemple:"
 | 
				
			||||||
 | 
					                    + "\n    upassword --batch <<EOF"
 | 
				
			||||||
 | 
					                    + "\n    --batch-after process_password1 args"
 | 
				
			||||||
 | 
					                    + "\n    --shell"
 | 
				
			||||||
 | 
					                    + "\n    --shell fixed-password1"
 | 
				
			||||||
 | 
					                    + "\n    --batch-after process_password2 args"
 | 
				
			||||||
 | 
					                    + "\n    --shell fixed-password2"
 | 
				
			||||||
 | 
					                    + "\n    EOF"
 | 
				
			||||||
 | 
					                    + "\nLe résultat serait quelque chose comme:"
 | 
				
			||||||
 | 
					                    + "\n    clear='<random-password>'"
 | 
				
			||||||
 | 
					                    + "\n    ... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5"
 | 
				
			||||||
 | 
					                    + "\n    process_password1 args"
 | 
				
			||||||
 | 
					                    + "\n    clear='fixed-password1'"
 | 
				
			||||||
 | 
					                    + "\n    ... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5"
 | 
				
			||||||
 | 
					                    + "\n    process_password1 args"
 | 
				
			||||||
 | 
					                    + "\n    clear='fixed-password2'"
 | 
				
			||||||
 | 
					                    + "\n    ... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5"
 | 
				
			||||||
 | 
					                    + "\n    process_password2 args");
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4904,7 +4930,8 @@ public class upassword {
 | 
				
			|||||||
            if (arg.equals("-p") || arg.equals("--hash-password")) {
 | 
					            if (arg.equals("-p") || arg.equals("--hash-password")) {
 | 
				
			||||||
                action = EAction.HASH_PASSWORD;
 | 
					                action = EAction.HASH_PASSWORD;
 | 
				
			||||||
                i++;
 | 
					                i++;
 | 
				
			||||||
            } else if (arg.substring(0, 2).equals("-j") || arg.equals("--clear-is-codetu")) {
 | 
					            } else if ((arg.length() >= 2 && arg.substring(0, 2).equals("-j"))
 | 
				
			||||||
 | 
					                    || arg.equals("--clear-is-codetu")) {
 | 
				
			||||||
                int shift = 1;
 | 
					                int shift = 1;
 | 
				
			||||||
                if (arg.equals("-j") || arg.equals("--clear-is-codetu")) {
 | 
					                if (arg.equals("-j") || arg.equals("--clear-is-codetu")) {
 | 
				
			||||||
                    if (args.length > i + 1) {
 | 
					                    if (args.length > i + 1) {
 | 
				
			||||||
@ -4931,7 +4958,8 @@ public class upassword {
 | 
				
			|||||||
            } else if (arg.equals("-d") || arg.equals("--aes-decrypt")) {
 | 
					            } else if (arg.equals("-d") || arg.equals("--aes-decrypt")) {
 | 
				
			||||||
                action = EAction.AES_DECRYPT;
 | 
					                action = EAction.AES_DECRYPT;
 | 
				
			||||||
                i++;
 | 
					                i++;
 | 
				
			||||||
            } else if (arg.substring(0, 2).equals("-f") || arg.equals("--aes-keyfile")) {
 | 
					            } else if ((arg.length() >= 2 && arg.substring(0, 2).equals("-f"))
 | 
				
			||||||
 | 
					                    || arg.equals("--aes-keyfile")) {
 | 
				
			||||||
                int shift = 1;
 | 
					                int shift = 1;
 | 
				
			||||||
                if (arg.equals("-f") || arg.equals("--aes-keyfile")) {
 | 
					                if (arg.equals("-f") || arg.equals("--aes-keyfile")) {
 | 
				
			||||||
                    if (args.length > i + 1) {
 | 
					                    if (args.length > i + 1) {
 | 
				
			||||||
@ -5171,10 +5199,15 @@ public class upassword {
 | 
				
			|||||||
                while (true) {
 | 
					                while (true) {
 | 
				
			||||||
                    String line = br.readLine();
 | 
					                    String line = br.readLine();
 | 
				
			||||||
                    if (line == null) break;
 | 
					                    if (line == null) break;
 | 
				
			||||||
                    if (line.startsWith(AFTER_COMMAND)) {
 | 
					                    if (line.startsWith("#")) {
 | 
				
			||||||
 | 
					                        // Ignorer
 | 
				
			||||||
 | 
					                    } else if (line.startsWith(AFTER_COMMAND)) {
 | 
				
			||||||
                        after = line.substring(AFTER_COMMAND_STRIP);
 | 
					                        after = line.substring(AFTER_COMMAND_STRIP);
 | 
				
			||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
                        upassword.run(SPACES.split(line));
 | 
					                        line = line.trim();
 | 
				
			||||||
 | 
					                        if (line.equals("")) args = new String[0];
 | 
				
			||||||
 | 
					                        else args = SPACES.split(line);
 | 
				
			||||||
 | 
					                        upassword.run(args);
 | 
				
			||||||
                        if (after != null) println(after);
 | 
					                        if (after != null) println(after);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										77
									
								
								uscrontab
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								uscrontab
									
									
									
									
									
								
							@ -236,6 +236,18 @@ OPTIONS
 | 
				
			|||||||
            $USCRONTAB_USERDIR
 | 
					            $USCRONTAB_USERDIR
 | 
				
			||||||
    -n, --fake
 | 
					    -n, --fake
 | 
				
			||||||
        Afficher au lieu de les exécuter les commandes qui doivent être lancées
 | 
					        Afficher au lieu de les exécuter les commandes qui doivent être lancées
 | 
				
			||||||
 | 
					    -P, --pause-for NBMINS
 | 
				
			||||||
 | 
					        Désactiver les planifications pendant NBMINS minutes. Utiliser -1 pour
 | 
				
			||||||
 | 
					        désactiver les planifications sans limite de durée. Pendant la période
 | 
				
			||||||
 | 
					        de pause, toutes les invocations de uscrontab n'ont aucun effet, sauf si
 | 
				
			||||||
 | 
					        on utilise l'option --force
 | 
				
			||||||
 | 
					    -Y, --unpause
 | 
				
			||||||
 | 
					        Réactiver les planifications après une mise en pause
 | 
				
			||||||
 | 
					    -p, --pause
 | 
				
			||||||
 | 
					        Désactiver les planifications pendant 1 journée. Equivalent à -P 1440
 | 
				
			||||||
 | 
					    -f, --force
 | 
				
			||||||
 | 
					        Forcer l'exécution de la planification, même si elle a été mise en pause
 | 
				
			||||||
 | 
					        avec l'option --pause
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OPTIONS AVANCEES
 | 
					OPTIONS AVANCEES
 | 
				
			||||||
    --lock LOCKFILE
 | 
					    --lock LOCKFILE
 | 
				
			||||||
@ -298,6 +310,21 @@ function get_usercrontab() {
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function check_pause() {
 | 
				
			||||||
 | 
					    # retourner 0 si on est en pause
 | 
				
			||||||
 | 
					    local pauseuntil pausefile="$pausefile" now="$2"
 | 
				
			||||||
 | 
					    if [ -f "$pausefile" ]; then
 | 
				
			||||||
 | 
					        pauseuntil="$(<"$pausefile")"
 | 
				
			||||||
 | 
					        if [ -z "$pauseuntil" ]; then
 | 
				
			||||||
 | 
					            # pause sans limitation de durée
 | 
				
			||||||
 | 
					            return 0
 | 
				
			||||||
 | 
					        elif [ "$pauseuntil" -gt "$now" ]; then
 | 
				
			||||||
 | 
					            return 0
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    return 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
USCRONTAB_CTLINE="* * * * * $script"
 | 
					USCRONTAB_CTLINE="* * * * * $script"
 | 
				
			||||||
USCRONTAB_LOCKDELAY=8
 | 
					USCRONTAB_LOCKDELAY=8
 | 
				
			||||||
USCRONTAB_STOPEC=101
 | 
					USCRONTAB_STOPEC=101
 | 
				
			||||||
@ -312,6 +339,8 @@ lockfile=auto
 | 
				
			|||||||
lockdelay=
 | 
					lockdelay=
 | 
				
			||||||
fake=
 | 
					fake=
 | 
				
			||||||
continuous=
 | 
					continuous=
 | 
				
			||||||
 | 
					pause=
 | 
				
			||||||
 | 
					force=
 | 
				
			||||||
parse_opts "${PRETTYOPTS[@]}" \
 | 
					parse_opts "${PRETTYOPTS[@]}" \
 | 
				
			||||||
    --help '$exit_with display_help' \
 | 
					    --help '$exit_with display_help' \
 | 
				
			||||||
    -A,--add,--install action=install \
 | 
					    -A,--add,--install action=install \
 | 
				
			||||||
@ -322,6 +351,10 @@ parse_opts "${PRETTYOPTS[@]}" \
 | 
				
			|||||||
    -r,--remove action=remove \
 | 
					    -r,--remove action=remove \
 | 
				
			||||||
    -l,--list action=list \
 | 
					    -l,--list action=list \
 | 
				
			||||||
    -n,--fake fake=1 \
 | 
					    -n,--fake fake=1 \
 | 
				
			||||||
 | 
					    -P:,--pause-for: '$action=pause; set@ pause' \
 | 
				
			||||||
 | 
					    -p,--pause action=pause \
 | 
				
			||||||
 | 
					    -Y,--unpause action=unpause \
 | 
				
			||||||
 | 
					    -f,--force force=1 \
 | 
				
			||||||
    --lock: lockfile= \
 | 
					    --lock: lockfile= \
 | 
				
			||||||
    --lockdelay: lockdelay= \
 | 
					    --lockdelay: lockdelay= \
 | 
				
			||||||
    -c,--continuous continuous=1 \
 | 
					    -c,--continuous continuous=1 \
 | 
				
			||||||
@ -332,7 +365,28 @@ parse_opts "${PRETTYOPTS[@]}" \
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
uscrontab="$1"; shift
 | 
					uscrontab="$1"; shift
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "$action" == "edit" ]; then
 | 
					pausefile="$USCRONTAB_USERFILE.pauseuntil"
 | 
				
			||||||
 | 
					now="$(awk 'BEGIN { print int(systime() / 60) * 60 }')"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$action" == "pause" ]; then
 | 
				
			||||||
 | 
					    [ -n "$pause" ] || pause=1440
 | 
				
			||||||
 | 
					    if [ "$pause" -lt 0 ]; then
 | 
				
			||||||
 | 
					        pauseuntil=
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        pauseuntil=$(($now + $pause * 60))
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    echo "$pauseuntil" >"$pausefile" || die
 | 
				
			||||||
 | 
					    enote "Désactivation des planifications pour $pause minute(s)"
 | 
				
			||||||
 | 
					    exit 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					elif [ "$action" == "unpause" ]; then
 | 
				
			||||||
 | 
					    if [ -f "$pausefile" ]; then
 | 
				
			||||||
 | 
					        rm "$pausefile" || die
 | 
				
			||||||
 | 
					        enote "Réactivation des planifications"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    exit 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					elif [ "$action" == "edit" ]; then
 | 
				
			||||||
    if [ -z "$uscrontab" ]; then
 | 
					    if [ -z "$uscrontab" ]; then
 | 
				
			||||||
        basedir="$(dirname "$USCRONTAB_USERFILE")"
 | 
					        basedir="$(dirname "$USCRONTAB_USERFILE")"
 | 
				
			||||||
        [ -d "$basedir" ] || die "$basedir: ce répertoire n'existe pas. Vérifiez l'installation de nutools"
 | 
					        [ -d "$basedir" ] || die "$basedir: ce répertoire n'existe pas. Vérifiez l'installation de nutools"
 | 
				
			||||||
@ -375,6 +429,10 @@ elif [ "$action" == "remove" ]; then
 | 
				
			|||||||
    exit 0
 | 
					    exit 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
elif [ "$action" == "list" ]; then
 | 
					elif [ "$action" == "list" ]; then
 | 
				
			||||||
 | 
					    if check_pause "$pausefile" "$now"; then
 | 
				
			||||||
 | 
					        ewarn "En pause. Réactiver avec $scriptname -Y"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [ -n "$uscrontab" ]; then
 | 
					    if [ -n "$uscrontab" ]; then
 | 
				
			||||||
        uscrontab="$(abspath "$uscrontab")"
 | 
					        uscrontab="$(abspath "$uscrontab")"
 | 
				
			||||||
        array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" uscrontab="$uscrontab" '$6 == script && $7 == uscrontab { print $7 }')"
 | 
					        array_from_lines ctfiles "$(crontab -l 2>/dev/null | awkrun script="$script" uscrontab="$uscrontab" '$6 == script && $7 == uscrontab { print $7 }')"
 | 
				
			||||||
@ -394,9 +452,9 @@ elif [ "$action" == "list" ]; then
 | 
				
			|||||||
            array_del ctfiles "#GENERIC"
 | 
					            array_del ctfiles "#GENERIC"
 | 
				
			||||||
            set_usercrontabs usercrontabs
 | 
					            set_usercrontabs usercrontabs
 | 
				
			||||||
            array_extend ctfiles usercrontabs
 | 
					            array_extend ctfiles usercrontabs
 | 
				
			||||||
            ewarn "planification générique désactivée. Vous pouvez la réactiver avec $scriptname -A"
 | 
					            ewarn "Planification générique désactivée. Vous pouvez la réactiver avec $scriptname -A"
 | 
				
			||||||
        elif [ ${#ctfiles[*]} -eq 0 ]; then
 | 
					        elif [ ${#ctfiles[*]} -eq 0 ]; then
 | 
				
			||||||
            einfo "aucune planification en cours"
 | 
					            einfo "Aucune planification en cours"
 | 
				
			||||||
            set_usercrontabs ctfiles
 | 
					            set_usercrontabs ctfiles
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
@ -410,7 +468,7 @@ elif [ "$action" == "list" ]; then
 | 
				
			|||||||
    exit $r
 | 
					    exit $r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
elif [ "$action" == "show-ctnow" ]; then
 | 
					elif [ "$action" == "show-ctnow" ]; then
 | 
				
			||||||
    ctnow
 | 
					    ctnow "$now"
 | 
				
			||||||
    exit 0
 | 
					    exit 0
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -432,6 +490,17 @@ elif [ "$action" == "uninstall" ]; then
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
elif [ "$action" == "run" ]; then
 | 
					elif [ "$action" == "run" ]; then
 | 
				
			||||||
 | 
					    if [ -n "$force" ]; then
 | 
				
			||||||
 | 
					        # ne pas tenir compte de l'état de pause
 | 
				
			||||||
 | 
					        :
 | 
				
			||||||
 | 
					    elif check_pause "$pausefile" "$now"; then
 | 
				
			||||||
 | 
					        ewarn "En pause. Réactiver avec $scriptname -Y"
 | 
				
			||||||
 | 
					        ac_clean "$lockfile"
 | 
				
			||||||
 | 
					        exit 0
 | 
				
			||||||
 | 
					    elif [ -f "$pausefile" ]; then
 | 
				
			||||||
 | 
					        rm "$pausefile"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [ -n "$uscrontab" ]; then
 | 
					    if [ -n "$uscrontab" ]; then
 | 
				
			||||||
        default_lockfile="/var/run/$scriptname$uscrontab.lock"
 | 
					        default_lockfile="/var/run/$scriptname$uscrontab.lock"
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user