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…
Reference in New Issue