réimplémenter certaines fonctions de façon plus efficace
This commit is contained in:
		
							parent
							
								
									c3b66b5c5c
								
							
						
					
					
						commit
						c9f6b23a71
					
				
							
								
								
									
										131
									
								
								ulib/base
									
									
									
									
									
								
							
							
						
						
									
										131
									
								
								ulib/base
									
									
									
									
									
								
							| @ -31,8 +31,101 @@ export TMPDIR="${TMPDIR:-${TMP:-${TEMP:-/tmp}}}" | |||||||
| [ -f ~/.nutoolsrc ] && . ~/.nutoolsrc | [ -f ~/.nutoolsrc ] && . ~/.nutoolsrc | ||||||
| 
 | 
 | ||||||
| ################################################################################ | ################################################################################ | ||||||
| ## valeurs | ## core | ||||||
|  | function recho() { | ||||||
|  | # afficher une valeur brute. contrairement à la commande echo, ne reconnaitre | ||||||
|  | # aucune option (i.e. -e, -E, -n) | ||||||
|  |     if [[ "${1:0:2}" == -[eEn] ]]; then | ||||||
|  |         echo -n - | ||||||
|  |         local first="${1:1}"; shift | ||||||
|  |         echo "$first" "$@" | ||||||
|  |     else | ||||||
|  |         echo "$*" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | function recho_() { | ||||||
|  | # afficher une valeur brute, sans passer à la ligne. contrairement à la commande | ||||||
|  | # echo, ne reconnaitre aucune option (i.e. -e, -E, -n) | ||||||
|  |     if [[ "${1:0:2}" == -[eEn] ]]; then | ||||||
|  |         echo -n - | ||||||
|  |         local first="${1:1}"; shift | ||||||
|  |         echo -n "$first" "$@" | ||||||
|  |     else | ||||||
|  |         echo -n "$*" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | function qval() { | ||||||
|  | # Dans la chaine $*, remplacer \ par \\, " par \", $ par \$, ` par \` | ||||||
|  | # Cela permet de quoter une chaine à mettre entre guillements note: la | ||||||
|  | # protection de ! n'est pas effectuée, parce que le comportement du shell est | ||||||
|  | # incohérent entre le shell interactif et les scripts. Pour une version plus | ||||||
|  | # robuste, il est nécessaire d'utiliser un programme externe tel que sed ou awk | ||||||
|  |     local s="$*" | ||||||
|  |     s="${s//\\/\\\\}" | ||||||
|  |     s="${s//\"/\\\"}" | ||||||
|  |     s="${s//\$/\\\$}" | ||||||
|  |     s="${s//\`/\\\`}" | ||||||
|  |     recho_ "$s" | ||||||
|  | } | ||||||
|  | function should_quote() { | ||||||
|  | # Tester si la chaine $* doit être mise entre quotes | ||||||
|  |     [ -z "$1" ] && return 0 | ||||||
|  |     local s="${*//[a-zA-Z0-9]/}" | ||||||
|  |     s="${s//,/}" | ||||||
|  |     s="${s//./}" | ||||||
|  |     s="${s//+/}" | ||||||
|  |     s="${s//\//}" | ||||||
|  |     s="${s//-/}" | ||||||
|  |     s="${s//_/}" | ||||||
|  |     s="${s//=/}" | ||||||
|  |     [ -n "$s" ] | ||||||
|  | } | ||||||
|  | function qvals() { | ||||||
|  | # Pour chaque argument de cette fonction, l'afficher éventuellement quotée avec qv() | ||||||
|  |     local arg first=1 | ||||||
|  |     for arg in "$@"; do | ||||||
|  |         [ -z "$first" ] && echo -n " " | ||||||
|  |         if should_quote "$arg"; then | ||||||
|  |             echo -n \" | ||||||
|  |             qv "$arg" | ||||||
|  |             echo -n \" | ||||||
|  |         else | ||||||
|  |             recho_ "$arg" | ||||||
|  |         fi | ||||||
|  |         first= | ||||||
|  |     done | ||||||
|  | } | ||||||
|  | function qlines() { | ||||||
|  | # Traiter chaque ligne de l'entrée standard pour en faire des chaines quotées | ||||||
|  | # avec ' | ||||||
|  |     sed "s/'/'\\\\''/g; s/.*/'&'/g" | ||||||
|  | } | ||||||
|  | function setv() { | ||||||
|  | # initialiser la variable $1 avec la valeur $2..* | ||||||
|  |     local __s_var="$1"; shift | ||||||
|  |     eval "$__s_var=\"$(qval "$*")\"" | ||||||
|  | } | ||||||
|  | function setx() { | ||||||
|  | # initialiser la variable $1 avec le résultat de la commande '$2..@' | ||||||
|  |     local __s_var="$1"; shift | ||||||
|  |     eval "$__s_var=\"\$(\"\$@\")\"" | ||||||
|  | } | ||||||
|  | function seta() { | ||||||
|  | # initialiser le tableau $1 avec le résultat de la commande '$2..@', chaque | ||||||
|  | # ligne du résultat étant un élément du tableau | ||||||
|  |     local __s_array="$1"; shift | ||||||
|  |     eval "$__s_array=($("$@" | qlines))" | ||||||
|  | } | ||||||
|  | function e2of() { | ||||||
|  | # lancer la commande $@ en redirigeant la sortie d'erreur sur la sortie standard | ||||||
|  |     "$@" 2>&1 | ||||||
|  | } | ||||||
|  | function nef() { | ||||||
|  | # lancer la commande $@ et filtrer du résultat toutes les lignes vides | ||||||
|  |     "$@" | sed '/^$/d' | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|  | ## valeurs | ||||||
| function isnum() { | function isnum() { | ||||||
| # retourner vrai si $1 est une valeur numérique entière (positive ou négative) | # retourner vrai si $1 est une valeur numérique entière (positive ou négative) | ||||||
|     [ ${#1} -gt 0 ] || return 1 |     [ ${#1} -gt 0 ] || return 1 | ||||||
| @ -61,14 +154,10 @@ function isrnum() { | |||||||
| } | } | ||||||
| function is_yes() { | function is_yes() { | ||||||
| # retourner vrai si $1 est une valeur "oui" | # retourner vrai si $1 est une valeur "oui" | ||||||
|     [ "$1" == "o" -o "$1" == "O" -o "$1" == "oui" -o "$1" == "OUI" ] && return 0 |     case "${1,,}" in | ||||||
|     [ "$1" == "y" -o "$1" == "Y" -o "$1" == "yes" -o "$1" == "YES" ] && return 0 |     o|oui|y|yes|v|vrai|t|true|on) return 0;; | ||||||
|     [ "$1" == "v" -o "$1" == "V" -o "$1" == "vrai" -o "$1" == "VRAI" ] && return 0 |     esac | ||||||
|     [ "$1" == "t" -o "$1" == "T" -o "$1" == "true" -o "$1" == "TRUE" ] && return 0 |     isnum "$1" && [ "$1" -ne 0 ] && return 0 | ||||||
|     [ "$1" == "on" -o "$1" == "ON" ] && return 0 |  | ||||||
|     if isnum "$1"; then |  | ||||||
|         [ "$1" -ne 0 ] && return 0 |  | ||||||
|     fi |  | ||||||
|     return 1 |     return 1 | ||||||
| } | } | ||||||
| function yesval() { | function yesval() { | ||||||
| @ -95,14 +184,10 @@ function normyesvals() { | |||||||
| } | } | ||||||
| function is_no() { | function is_no() { | ||||||
| # retourner vrai si $1 est une valeur "non" | # retourner vrai si $1 est une valeur "non" | ||||||
|     [ "$1" == "n" -o "$1" == "N" -o "$1" == "non" -o "$1" == "NON" ] && return 0 |     case "${1,,}" in | ||||||
|     [ "$1" == "no" -o "$1" == "NO" ] && return 0 |     n|non|no|f|faux|false|off) return 0;; | ||||||
|     [ "$1" == "f" -o "$1" == "F" -o "$1" == "faux" -o "$1" == "FAUX" ] && return 0 |     esac | ||||||
|     [ "$1" == "false" -o "$1" == "FALSE" ] && return 0 |     isnum "$1" && [ "$1" -eq 0 ] && return 0 | ||||||
|     [ "$1" == "off" -o "$1" == "OFF" ] && return 0 |  | ||||||
|     if isnum "$1"; then |  | ||||||
|         [ "$1" -eq 0 ] && return 0 |  | ||||||
|     fi |  | ||||||
|     return 1 |     return 1 | ||||||
| } | } | ||||||
| function rawecho() { | function rawecho() { | ||||||
| @ -141,18 +226,6 @@ function quote_arg() { | |||||||
|     s="${s//\`/\\\`}" |     s="${s//\`/\\\`}" | ||||||
|     rawecho "$s" |     rawecho "$s" | ||||||
| } | } | ||||||
| function should_quote() { |  | ||||||
|     [ -z "$1" ] && return 0 |  | ||||||
|     local s="${1//[a-zA-Z0-9]/}" |  | ||||||
|     s="${s//,/}" |  | ||||||
|     s="${s//./}" |  | ||||||
|     s="${s//+/}" |  | ||||||
|     s="${s//\//}" |  | ||||||
|     s="${s//-/}" |  | ||||||
|     s="${s//_/}" |  | ||||||
|     s="${s//=/}" |  | ||||||
|     [ -n "$s" ] |  | ||||||
| } |  | ||||||
| function quoted_arg() { | function quoted_arg() { | ||||||
| # Dans la chaine $1, remplacer \ par \\, " par \" et $ par \$, et afficher la | # Dans la chaine $1, remplacer \ par \\, " par \" et $ par \$, et afficher la | ||||||
| # chaine entourée de guillemets, si nécessaire | # chaine entourée de guillemets, si nécessaire | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jephte CLAIN
						Jephte CLAIN