Merge branch 'master' of vcs.univ.run:modules/nutools
This commit is contained in:
		
						commit
						b7ced740b3
					
				
							
								
								
									
										132
									
								
								ulib/base
									
									
									
									
									
								
							
							
						
						
									
										132
									
								
								ulib/base
									
									
									
									
									
								
							@ -31,8 +31,102 @@ 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 ne sont pas signifiants)
 | 
				
			||||||
 | 
					    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 ne sont pas signifiants)
 | 
				
			||||||
 | 
					    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() {
 | 
				
			||||||
 | 
					# Afficher chaque argument de cette fonction quotée le cas échéant avec "
 | 
				
			||||||
 | 
					# Chaque valeur est séparée par un espace.
 | 
				
			||||||
 | 
					    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 +155,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 +185,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 +227,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