diff --git a/.dokuwikigen b/.dokuwikigen index 7c79edd..4f81303 100644 --- a/.dokuwikigen +++ b/.dokuwikigen @@ -3,10 +3,10 @@ gendefault etitle "Documentation de ulib" -array_from_lines ulibnames "$(list_files ulib)" +array_from_lines ulibnames "$(list_files lib/ulib)" # faire les pages for ulibname in "${ulibnames[@]}"; do - awkrun <"ulib/$ulibname" 'BEGIN { + awkrun <"lib/ulib/$ulibname" 'BEGIN { in_func = 0 dump_doc = 0 dumped_doc = 0 diff --git a/.udir b/.udir index 67946da..a5c7d43 100644 --- a/.udir +++ b/.udir @@ -6,7 +6,7 @@ udir_note="" udir_types=("uinst") uinc=true uinc_options=() -uinc_args=(ucrontab reptyr.cgo ulib/ulibsh ulib/support/install-pubkeys.sh lib/uinst/system_caps.legacy) +uinc_args=(ucrontab reptyr.cgo lib/ulib/ulibsh lib/ulib/support/install-pubkeys.sh lib/uinst/system_caps.legacy) # Faut-il désinstaller les fichiers de configuration de utools? uninst_utools= diff --git a/EnsureVM b/EnsureVM index 9833dd8..f54042f 100755 --- a/EnsureVM +++ b/EnsureVM @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS service function display_help() { uecho "$scriptname: s'assurer que les services sont lancés pour un type de virtualisation @@ -10,10 +12,6 @@ USAGE Les types supportés sont virtualbox et kvm (par défaut)" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS service || -exit 1 - function ensure_kvm() { # S'assurer que les modules VirtualBox sont déchargés et que les modules kvm # sont chargés, et que le service libvirt-bin est démarré diff --git a/SKvm b/SKvm index 060ab8f..23746c1 100755 --- a/SKvm +++ b/SKvm @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS virsh function display_help() { uecho "$scriptname: lancer une machine virtuelle kvm @@ -34,10 +36,6 @@ OPTIONS Afficher le gestionnaire de machines virtuelle" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS virsh || -exit 1 - function build_arrays() { # Construire les listes avms, rvms, svms # rvms: les vms qui tournent diff --git a/SVirtualBox b/SVirtualBox index ff0e61b..f9ffafe 100755 --- a/SVirtualBox +++ b/SVirtualBox @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: lancer une machine virtuelle VirtualBox @@ -23,10 +25,6 @@ OPTIONS -g Afficher le gestionnaire de machines virtuelle" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - function build_arrays() { # Construire les listes avms, rvms, svms # rvms: les vms qui tournent diff --git a/_root b/_root index 823ece3..088a355 100755 --- a/_root +++ b/_root @@ -1,15 +1,13 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire base function display_help() { uecho "$scriptname: devenir l'utilisateur root, avec 'sudo' si possible, ou 'su' si 'sudo' n'est pas installé" } -source "$(dirname "$0")/ulib/ulib" && -urequire base || -exit 1 - parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" diff --git a/authftp b/authftp index 6e7bb5b..40c3cda 100755 --- a/authftp +++ b/authftp @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Se connecter sur un site FTP authentifié @@ -30,10 +32,6 @@ façon dont le proxy ftp est configuré, il n'est pas possible de se connecter avec un mot de passe qui contient le caractère @" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - AUTHFTP_PROXY_DISABLED=1 # par défaut, ne pas utiliser le proxy set_defaults proxy set_defaults authftp diff --git a/bashrc b/bashrc index c8dd759..a98d548 100644 --- a/bashrc +++ b/bashrc @@ -1,6 +1,6 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 function uprovide() { :; } -source @@dest@@/ulib/uenv || return +source @@dest@@/lib/ulib/uenv || return __uenv_source_dirs @@dest@@/bashrc.d "$HOME/etc/bashrc.d" __uenv_cleanup diff --git a/caturl b/caturl index 1fa585e..3bcb50d 100755 --- a/caturl +++ b/caturl @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Afficher une url @@ -8,10 +10,6 @@ USAGE $scriptname " } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" diff --git a/cssh b/cssh index 28d6438..2a26417 100755 --- a/cssh +++ b/cssh @@ -1,6 +1,6 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS function display_help() { diff --git a/doc/update.sh b/doc/update.sh index 8d8a958..f8ae7a6 100755 --- a/doc/update.sh +++ b/doc/update.sh @@ -1,13 +1,9 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -source "$(dirname "$0")/../ulib/ulib" && -urequire DEFAULTS || -exit 1 -OENC="$UTF8" +source "$(dirname "$0")/../lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { - local OENC="$UTF8" uecho "$scriptname: Mettre à jour la documentation pour les outils de nutools USAGE @@ -93,7 +89,7 @@ $("$cmd" --help) fi if [ -n "$ulib" ]; then - array_from_lines ulibnames "$(list_files ../ulib)" + array_from_lines ulibnames "$(list_files ../lib/ulib)" # faire l'entête dump_content ulib.twp "$oldcontent" echo " @@ -104,7 +100,7 @@ if [ -n "$ulib" ]; then write_twpage "$oldcontent" ulib "$newcontent" ulib.twp # faire les pages for ulibname in "${ulibnames[@]}"; do - ulib="../ulib/$ulibname" + ulib="../lib/ulib/$ulibname" twpage="ulib_$ulibname.twp" title="ulib/$ulibname" dump_content "$twpage" "$oldcontent" diff --git a/dokuwiki b/dokuwiki index 94ef103..bedf94d 100755 --- a/dokuwiki +++ b/dokuwiki @@ -43,9 +43,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS # Traduire le nom du script for script_alias in "${SCRIPT_ALIASES[@]}"; do diff --git a/fconv b/fconv index afede28..82f832b 100755 --- a/fconv +++ b/fconv @@ -30,9 +30,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS from=detect case "${scriptname#fconv2}" in diff --git a/fnconv b/fnconv index ce0a593..da6f157 100755 --- a/fnconv +++ b/fnconv @@ -28,9 +28,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS from=detect case "${scriptname#fnconv2}" in diff --git a/geturl b/geturl index ddb3c25..de561cd 100755 --- a/geturl +++ b/geturl @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Télécharger un fichier avec wget ou curl @@ -8,10 +10,6 @@ USAGE $scriptname [wget options]" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - parse_opts + "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" diff --git a/lib/bashrc.d/bash_completion.nutools b/lib/bashrc.d/bash_completion.nutools index 35ab546..3f92b61 100644 --- a/lib/bashrc.d/bash_completion.nutools +++ b/lib/bashrc.d/bash_completion.nutools @@ -7,7 +7,7 @@ if [ -n "$UTOOLS_BASH_COMPLETION" ]; then 6*|squeeze*) # le code suivant n'est compatible qu'avec debian squeeze if [ -z "$BASH_COMPLETION" -a "${BASH_VERSINFO[0]}" -ge 4 ]; then - source "@@dest@@/ulib/bash_completion" + source "@@dest@@/lib/ulib/bash_completion" fi if [ -n "$BASH_COMPLETION" ]; then if [ -n "$BASH_COMPLETION_DIR" -a -f "$BASH_COMPLETION_DIR/ssh" ]; then diff --git a/lib/init.d/install-kvm-stop-all b/lib/init.d/install-kvm-stop-all index ddd3227..31ef516 100755 --- a/lib/init.d/install-kvm-stop-all +++ b/lib/init.d/install-kvm-stop-all @@ -1,7 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -. "$(dirname "$0")/../../ulib/ulib" && urequire DEFAULTS || exit 1 +. "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 +urequire DEFAULTS check_sysinfos -s linux -d debian || exit 0 run_as_root "$@" diff --git a/lib/init.d/install-openvz-fix-etchosts b/lib/init.d/install-openvz-fix-etchosts index 9787000..f89fdbb 100755 --- a/lib/init.d/install-openvz-fix-etchosts +++ b/lib/init.d/install-openvz-fix-etchosts @@ -1,7 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -. "$(dirname "$0")/../../ulib/ulib" && urequire DEFAULTS || exit 1 +. "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 +urequire DEFAULTS check_sysinfos -s linux -d debian || exit 0 run_as_root "$@" diff --git a/lib/mkselfinst b/lib/mkselfinst index 4c0358f..f03dd3a 100755 --- a/lib/mkselfinst +++ b/lib/mkselfinst @@ -1,11 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -source "$(dirname "$0")/../ulib/ulib" && -urequire DEFAULTS || -exit 1 -OENC="$UTF8" -MAKESELFDIR="$scriptdir/makeself-2.1.5" +source "$(dirname "$0")/../lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Créer une archive auto-extractible qui installe nutools @@ -22,6 +18,8 @@ OPTIONS s'auto-détruit après utilisation." } +MAKESELFDIR="$scriptdir/makeself-2.1.5" + mode=755 parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ diff --git a/lib/profile.d/nutools b/lib/profile.d/nutools index 62bebb4..d32d2d4 100644 --- a/lib/profile.d/nutools +++ b/lib/profile.d/nutools @@ -6,7 +6,7 @@ # gourmandes en resources. # Au 18/06/2013, cela ne concerne que les scripts/fichiers suivants: # - lib/profile.d/bash_prompt -# - ulib/vcs {git_commit} +# - lib/ulib/vcs {git_commit} : "${UTOOLS_AUTO:=1}" "${UTOOLS_NOPUSH:=}" export UTOOLS_AUTO UTOOLS_NOPUSH diff --git a/lib/pywrapper b/lib/pywrapper index bf28274..43b4c2e 100755 --- a/lib/pywrapper +++ b/lib/pywrapper @@ -17,5 +17,5 @@ else nutoolsdir="$(cd "$(dirname "$0")"; pwd)" fi -source "$nutoolsdir/ulib/nutools/pyulib" -exec "$nutoolsdir/pyulib/src/uapps/$scriptname.py" "$@" +source "$nutoolsdir/lib/ulib/nutools/pyulib" +exec "$nutoolsdir/lib/pyulib/src/uapps/$scriptname.py" "$@" diff --git a/lib/script.template b/lib/script.template index 36866c9..5e4c13e 100755 --- a/lib/script.template +++ b/lib/script.template @@ -1,6 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1; urequire DEFAULTS +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: diff --git a/lib/templates/auto b/lib/templates/auto index 9006143..ad46d84 100755 --- a/lib/templates/auto +++ b/lib/templates/auto @@ -23,10 +23,9 @@ if [ $# -eq 2 ]; then fi fi -#source /etc/ulib && -source "$(dirname "$0")/../../ulib/ulib" && -urequire DEFAULTS || -exit 1 +#source /etc/ulib || exit 1 +source "$(dirname "$0")/../../ulib/ulib" || exit 1 +urequire DEFAULTS [ $# -eq 1 -a "$1" == "--help" ] && exit_with display_help diff --git a/lib/templates/java b/lib/templates/java index 11648c9..94437ee 100755 --- a/lib/templates/java +++ b/lib/templates/java @@ -46,10 +46,9 @@ if [ $# -eq 2 ]; then fi fi -#source /etc/ulib && -source "$(dirname "$0")/../../ulib/ulib" && -urequire DEFAULTS || -exit 1 +#source /etc/ulib || exit 1 +source "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 +urequire DEFAULTS function check_overwrite() { if [ -e "$1" -a -z "$overwrite" ]; then diff --git a/lib/templates/puppet b/lib/templates/puppet index 4522e3b..60f8229 100755 --- a/lib/templates/puppet +++ b/lib/templates/puppet @@ -46,10 +46,9 @@ if [ $# -eq 2 ]; then fi fi -#source /etc/ulib && -source "$(dirname "$0")/../../ulib/ulib" && -urequire DEFAULTS || -exit 1 +#source /etc/ulib || exit 1 +source "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 +urequire DEFAULTS function check_overwrite() { if [ -e "$1" -a -z "$overwrite" ]; then diff --git a/lib/templates/script.template b/lib/templates/script.template index f4b8c94..aee03bf 100644 --- a/lib/templates/script.template +++ b/lib/templates/script.template @@ -49,10 +49,9 @@ if [ $# -eq 2 ]; then fi fi -#source /etc/ulib && -source "$(dirname "$0")/../../ulib/ulib" && -urequire DEFAULTS || -exit 1 +#source /etc/ulib || exit 1 +source "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 +urequire DEFAULTS function check_overwrite() { if [ -e "$1" -a -z "$overwrite" ]; then diff --git a/lib/templates/shell b/lib/templates/shell index 30dab61..90ab59a 100755 --- a/lib/templates/shell +++ b/lib/templates/shell @@ -53,7 +53,7 @@ if [ $# -eq 2 ]; then fi #source /etc/ulib || exit 1 -source "$(dirname "$0")/../../ulib/ulib" || exit 1 +source "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 urequire DEFAULTS set_defaults nutools diff --git a/lib/templates/text b/lib/templates/text index 7c303b7..3ececcb 100755 --- a/lib/templates/text +++ b/lib/templates/text @@ -46,10 +46,9 @@ if [ $# -eq 2 ]; then fi fi -#source /etc/ulib && -source "$(dirname "$0")/../../ulib/ulib" && -urequire DEFAULTS || -exit 1 +#source /etc/ulib || exit 1 +source "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 +urequire DEFAULTS function check_overwrite() { if [ -e "$1" -a -z "$overwrite" ]; then diff --git a/lib/templates/www b/lib/templates/www index 9482ada..b2bd693 100755 --- a/lib/templates/www +++ b/lib/templates/www @@ -46,10 +46,9 @@ if [ $# -eq 2 ]; then fi fi -#source /etc/ulib && -source "$(dirname "$0")/../../ulib/ulib" && -urequire DEFAULTS || -exit 1 +#source /etc/ulib || exit 1 +source "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 +urequire DEFAULTS function check_overwrite() { if [ -e "$1" -a -z "$overwrite" ]; then diff --git a/lib/tiddlywiki/download-latest.sh b/lib/tiddlywiki/download-latest.sh index 613259b..73dde68 100755 --- a/lib/tiddlywiki/download-latest.sh +++ b/lib/tiddlywiki/download-latest.sh @@ -1,10 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -source "$(dirname "$0")/../../ulib/ulib" && -urequire DEFAULTS tiddlywiki || -exit 1 -OENC="$UTF8" +source "$(dirname "$0")/../../lib/ulib/ulib" || exit 1 +urequire DEFAULTS tiddlywiki function display_help() { echo "$scriptname: Télécharger la dernière version de TiddlyWiki" diff --git a/lib/uinst/conf b/lib/uinst/conf index 68b79d9..fa2bac2 100644 --- a/lib/uinst/conf +++ b/lib/uinst/conf @@ -1,7 +1,8 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$@" || exit 1 -source "$ULIBDIR/ulib" && urequire DEFAULTS uenv uenv_update || exit 1 +source "$ULIBDIR/ulib" || exit 1 +urequire DEFAULTS uenv uenv_update cd "$scriptdir/../.." # supprimer les fichiers de VCS @@ -11,13 +12,13 @@ rm -rf .git rm -f .nutools-devel # supprimer fichiers de développement -rm -rf pyulib/{build,devel,migrate,test} +rm -rf lib/pyulib/{build,devel,migrate,test} # liens pour les scripts python for i in plver plbck uencdetect urandomize umail uxpath wofixsql; do ln -s lib/pywrapper "$i" done -ln -s ulib/support/cgiupload.py +ln -s lib/ulib/support/cgiupload.py # liens pour les scripts shell for i in cg cgs; do diff --git a/lib/uinst/rootconf b/lib/uinst/rootconf index c3cbb6f..5620d3b 100644 --- a/lib/uinst/rootconf +++ b/lib/uinst/rootconf @@ -1,24 +1,25 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$@" || exit 1 -source "$ULIBDIR/ulib" && urequire DEFAULTS || exit 1 +source "$ULIBDIR/ulib" || exit 1 +urequire DEFAULTS -cd "$scriptdir/../../" +cd "$scriptdir/../.." log=/tmp/nutools-pyulib-install.log etitle -s "Installation des packages python" enote "Le log de l'installation se trouve dans $log" -./uinst -y pyulib >&"$log" +./uinst -y lib/pyulib >&"$log" eend # setup.py laisse des fichiers avec les droits de root, et ces fichiers ne # peuvent être supprimés par l'utilisateur qui lance uinst. Les supprimer ici. -rm -rf pyulib/build +rm -rf lib/pyulib/build dest="@@dest@@" for i in ulib ulibsh; do - sed "s|@@""dest""@@|$dest|g" "ulib/$i" >"/etc/$i" + sed "s|@@""dest""@@|$dest|g" "lib/ulib/$i" >"/etc/$i" done -cp ulib/.ulib_version /etc/.ulib_version +cp lib/ulib/.ulib_version /etc/.ulib_version echo >/etc/ulibauto '# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 if [ x"$BASH" != x -a -f /etc/ulib ]; then . /etc/ulib diff --git a/lib/ulib/base b/lib/ulib/base index 4a66105..a29851b 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -11,6 +11,11 @@ elif [ "$0" == "-bash" ]; then scriptname= scriptdir= script= +elif [ ! -f "$0" -a -f "${0#-}" ]; then + scriptname="$(basename -- "${0#-}")" + scriptdir="$(dirname -- "${0#-}")" + scriptdir="$(cd "$scriptdir"; pwd)" + script="$scriptdir/$scriptname" else scriptname="$(basename -- "$0")" scriptdir="$(dirname -- "$0")" diff --git a/lib/ulib/support/install-pubkeys.sh b/lib/ulib/support/install-pubkeys.sh index 3541b93..66e74f8 100755 --- a/lib/ulib/support/install-pubkeys.sh +++ b/lib/ulib/support/install-pubkeys.sh @@ -29,6 +29,79 @@ export TMPDIR="${TMPDIR:-${TMP:-${TEMP:-/tmp}}}" [ -f /etc/nutoolsrc ] && . /etc/nutoolsrc [ -f ~/.nutoolsrc ] && . ~/.nutoolsrc +function recho() { + if [[ "${1:0:2}" == -[eEn] ]]; then + echo -n - + local first="${1:1}"; shift + echo "$first$@" + else + echo "$@" + fi +} +function recho_() { + if [[ "${1:0:2}" == -[eEn] ]]; then + echo -n - + local first="${1:1}"; shift + echo -n "$first$@" + else + echo -n "$@" + fi +} +function qval() { + local s="$*" + s="${s//\\/\\\\}" + s="${s//\"/\\\"}" + s="${s//\$/\\\$}" + s="${s//\`/\\\`}" + recho_ "$s" +} +function should_quote() { + [ -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() { + local arg first=1 + for arg in "$@"; do + [ -z "$first" ] && echo -n " " + if should_quote "$arg"; then + echo -n \" + qval "$arg" + echo -n \" + else + recho_ "$arg" + fi + first= + done +} +function qlines() { + sed "s/'/'\\\\''/g; s/.*/'&'/g" +} +function setv() { + local __s_var="$1"; shift + eval "$__s_var=\"$(qval "$*")\"" +} +function setx() { + local __s_var="$1"; shift + eval "$__s_var=\"\$(\"\$@\")\"" +} +function seta() { + local __s_array="$1"; shift + eval "$__s_array=($("$@" | qlines))" +} +function e2of() { + "$@" 2>&1 +} +function nef() { + "$@" | sed '/^$/d' +} function isnum() { [ ${#1} -gt 0 ] || return 1 @@ -53,14 +126,10 @@ function isrnum() { [ -z "$v" ] } function is_yes() { - [ "$1" == "o" -o "$1" == "O" -o "$1" == "oui" -o "$1" == "OUI" ] && return 0 - [ "$1" == "y" -o "$1" == "Y" -o "$1" == "yes" -o "$1" == "YES" ] && return 0 - [ "$1" == "v" -o "$1" == "V" -o "$1" == "vrai" -o "$1" == "VRAI" ] && return 0 - [ "$1" == "t" -o "$1" == "T" -o "$1" == "true" -o "$1" == "TRUE" ] && return 0 - [ "$1" == "on" -o "$1" == "ON" ] && return 0 - if isnum "$1"; then - [ "$1" -ne 0 ] && return 0 - fi + case "${1,,}" in + o|oui|y|yes|v|vrai|t|true|on) return 0;; + esac + isnum "$1" && [ "$1" -ne 0 ] && return 0 return 1 } function yesval() { @@ -79,14 +148,10 @@ function normyesvals() { done } function is_no() { - [ "$1" == "n" -o "$1" == "N" -o "$1" == "non" -o "$1" == "NON" ] && return 0 - [ "$1" == "no" -o "$1" == "NO" ] && return 0 - [ "$1" == "f" -o "$1" == "F" -o "$1" == "faux" -o "$1" == "FAUX" ] && return 0 - [ "$1" == "false" -o "$1" == "FALSE" ] && return 0 - [ "$1" == "off" -o "$1" == "OFF" ] && return 0 - if isnum "$1"; then - [ "$1" -eq 0 ] && return 0 - fi + case "${1,,}" in + n|non|no|f|faux|false|off) return 0;; + esac + isnum "$1" && [ "$1" -eq 0 ] && return 0 return 1 } function rawecho() { @@ -115,18 +180,6 @@ function quote_arg() { s="${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() { should_quote "$1" && echo "\"$(quote_arg "$1")\"" || quote_arg "$1" } @@ -403,6 +456,18 @@ function array_fillrange() { done array_copy "$1" __af_vs } +function array_eq() { + local -a __ae_a1 __ae_a2 + array_copy __ae_a1 "$1" + array_copy __ae_a2 "$2" + [ ${#__ae_a1[*]} -eq ${#__ae_a2[*]} ] || return 1 + local __ae_v __ae_i=0 + for __ae_v in "${__ae_a1[@]}"; do + [ "$__ae_v" == "${__ae_a2[$__ae_i]}" ] || return 1 + __ae_i=$(($__ae_i + 1)) + done + return 0 +} function array_contains() { local __ac_v eval 'for __ac_v in "${'"$1"'[@]}"; do @@ -512,14 +577,14 @@ function array_extend_lasts() { eval "$1=(\"\${$1[@]}\" \"\${$2[@]:1}\")" } function array_xsplit() { - eval "$1=($(<<<"$2" stripnl | awkrun RS="${3:-:}" ' + eval "$1=($(recho_ "$2" | awkrun RS="${3:-:}" ' { gsub(/'\''/, "'\'\\\\\'\''") print "'\''" $0 "'\''" }'))" #" } function array_split() { - eval "$1=($(<<<"$2" stripnl | awkrun RS="${3:-:}" ' + eval "$1=($(recho_ "$2" | awkrun RS="${3:-:}" ' /^$/ { next } { gsub(/'\''/, "'\'\\\\\'\''") @@ -530,14 +595,14 @@ function array_from_path() { array_split "$1" "$2" ":" } function array_from_xlines() { - eval "$1=($(<<<"$2" _nl2lf | awk ' + eval "$1=($(recho_ "$2" | _nl2lf | awk ' { gsub(/'\''/, "'\'\\\\\'\''") print "'\''" $0 "'\''" }'))" #" } function array_from_lines() { - eval "$1=($(<<<"$2" _nl2lf | awk ' + eval "$1=($(recho_ "$2" | _nl2lf | awk ' /^$/ { next } { gsub(/'\''/, "'\'\\\\\'\''") @@ -591,7 +656,7 @@ function array_fix_paths() { array_copy __afp_vs "$__afp_an" array_new "$__afp_an" for __afp_v in "${__afp_vs[@]}"; do - array_split __afp_v "$__afp_v" + array_split __afp_v "$__afp_v" "$__afp_s" array_extend "$__afp_an" __afp_v done } @@ -624,12 +689,9 @@ function parse_date() { }')" esac case "$type" in - d|date) - awk '{ print strftime("%d/%m/%Y", $0 + 0) }' <<<"$value" - ;; - l|ldap) - awk '{ print strftime("%Y%m%d%H%M%S+0400", $0 + 0) }' <<<"$value" - ;; + d|date) awk '{ print strftime("%d/%m/%Y", $0 + 0) }' <<<"$value";; + l|ldap) awk '{ print strftime("%Y%m%d%H%M%S+0400", $0 + 0) }' <<<"$value";; + m|mysql) awk '{ print strftime("%Y-%m-%d", $0 + 0) }' <<<"$value";; *) rawecho "$value" ;; @@ -899,6 +961,13 @@ function testsame() { function testdiff() { ! quietdiff "$@" } +function testupdated() { + if [ -f "$2" ]; then + testdiff "$1" "$2" + else + return 0 + fi +} function testnewer() { test ! -e "$2" -o "$1" -nt "$2" } @@ -989,15 +1058,16 @@ function rm_maybe() { done [ -n "$rm" ] && /bin/rm "$@" } -__CPDIR_RSYNC_ARGS=() +__CPDIR_RSYNC_SLOW=1 # synchro potentiellement plus lente, mais plus fidèle (option -c) +__CPDIR_RSYNC_ARGS=(-q) function cpdir() { if progexists rsync; then [ -d "$2" ] || mkdir -p "$2" || return 1 if [ -d "$1" ]; then - rsync -qa "${__CPDIR_RSYNC_ARGS[@]}" "$1/" "$2/" + rsync -a ${__CPDIR_RSYNC_SLOW:+-c} "${__CPDIR_RSYNC_ARGS[@]}" "$1/" "$2/" else - rsync -qa "${__CPDIR_RSYNC_ARGS[@]}" "$1" "$2/" + rsync -a ${__CPDIR_RSYNC_SLOW:+-c} "${__CPDIR_RSYNC_ARGS[@]}" "$1" "$2/" fi else __cpdir "$@" @@ -1033,17 +1103,17 @@ function __cpdir() { fi fi } -CPNOVCS_OPTS=() # deprecated -__CPNOVCS_RSYNC_ARGS=() +__CPNOVCS_RSYNC_SLOW=1 # synchro potentiellement plus lente, mais plus fidèle (option -c) +__CPNOVCS_RSYNC_ARGS=(-q) function cpnovcs() { local src="$1" destdir="$2" [ -d "$destdir" ] || mkdir -p "$destdir" || return 1 if progexists rsync; then local gitexclude=/.git/ - if [ "${src%/}" != "$src" ]; then + if [ "${src%/}" == "$src" ]; then gitexclude="/$(basename -- "$src")$gitexclude" fi - rsync -qa --exclude CVS --exclude .svn --exclude "$gitexclude" "${CPNOVCS_OPTS[@]}" "${__CPNOVCS_RSYNC_ARGS[@]}" "$src" "$destdir/" + rsync -a ${__CPNOVCS_RSYNC_SLOW:+-c} --exclude CVS/ --exclude .svn/ --exclude "$gitexclude" "${__CPNOVCS_RSYNC_ARGS[@]}" "$src" "$destdir/" elif [ "${src%/}" != "$src" ]; then __cpdir "$src" "$destdir" else @@ -1271,11 +1341,25 @@ function get_archive_appname() { print substr($0, 1, RSTART - 1) } else if (match($0, /([0-9]+([-_.][0-9]+)*([a-zA-Z][0-9]*|[-_.][0-9]+[a-zA-Z][0-9]*)?)$/)) { print substr($0, 1, RSTART - 1) + } else if (match($0, /([0-9]+[a-z][a-z][a-z0-9]?)$/, vs)) { + print substr($0, 1, RSTART - 1) } else { print $0 } }' } +function get_archive_versionsuffix() { + local basename="$(get_archive_basename "$1")" + echo "$basename" | awk '{ + if (match($0, /([-_.][0-9]+([-_.][0-9]+)*([a-zA-Z][0-9]*|[-_.][0-9]+[a-zA-Z][0-9]*)?)$/, vs)) { + print vs["1"] + } else if (match($0, /([0-9]+([-_.][0-9]+)*([a-zA-Z][0-9]*|[-_.][0-9]+[a-zA-Z][0-9]*)?)$/, vs)) { + print vs["1"] + } else if (match($0, /([0-9]+[a-z][a-z][a-z0-9]?)$/, vs)) { + print vs["1"] + } +}' +} function get_archive_version() { local basename="$(get_archive_basename "$1")" echo "$basename" | awk '{ @@ -1283,7 +1367,7 @@ function get_archive_version() { print vs["1"] } else if (match($0, /([0-9]+([-_.][0-9]+)*([a-zA-Z][0-9]*|[-_.][0-9]+[a-zA-Z][0-9]*)?)$/, vs)) { print vs["1"] - } else if (match($0, /([0-9]+[a-z][a-z][a-z]?)$/, vs)) { + } else if (match($0, /([0-9]+[a-z][a-z][a-z0-9]?)$/, vs)) { print vs["1"] } }' @@ -1504,6 +1588,13 @@ function quote_sql(s) {'" gsub(/'/, \"''\", s) return \"'\" s \"'\" "'} +function unquote_mysqlcsv(s) { + gsub(/\\n/, "\n", s) + gsub(/\\t/, "\t", s) + gsub(/\\0/, "\0", s) + gsub(/\\\\/, "\\", s) + return s +} function array_new(dest) { dest[0] = 0 # forcer awk à considérer dest comme un tableau delete dest @@ -1807,7 +1898,7 @@ function array_formatcsv2(fields, colsep, mvsep, qchar, echar, count, indic if (echar != "") gsub(qchar, quote_subrepl(echar) "&", value); else gsub(qchar, "&&", value); } - if (qchar != "" && (index(value, mvsep) != 0 || index(value, colsep) != 0 || __csv_should_quote(value))) { + if (qchar != "" && (index(value, mvsep) != 0 || index(value, colsep) != 0 || index(value, qchar) != 0 || __csv_should_quote(value))) { line = line qchar value qchar } else { line = line value @@ -1981,12 +2072,12 @@ function awkdef() { } function lawkrun() { local -a __ar_defs __ar_args - while [ -n "$1" -a "$1" != "--" ]; do + while [ $# -gt 0 -a "$1" != "--" ]; do __ar_defs=("${__ar_defs[@]}" "$1") shift done shift - while [ -n "$1" ]; do + while [ $# -gt 0 ]; do __ar_args=("${__ar_args[@]}" "$1") shift done @@ -2341,6 +2432,13 @@ function pidfile_check() { fi return 1 } +function page_maybe() { + if isatty; then + less -XF + else + cat + fi +} function utools_local() { @@ -2638,6 +2736,29 @@ function eecho_() { function edebug() { show_debug || return; eflush; __edebug "$*" 1>&2 } +function trace() { + local r cmd="$(quoted_args "$@")" + show_info && { eflush; __eecho "\$ $cmd" 1>&2; } + "$@"; r=$? + if [ $r -ne 0 ]; then + if show_info; then + eflush; __eecho "^ [EC #$r]" 1>&2 + elif show_error; then + eflush; __eecho "^ $cmd [EC #$r]" 1>&2; + fi + fi + return $r +} +function trace_error() { + local r + "$@"; r=$? + if [ $r -ne 0 ]; then + local cmd="$(quoted_args "$@")" + show_error && { eflush; __eecho "^ $cmd [EC #$r]" 1>&2; } + fi + return $r +} + function etitle() { local __t_deferred= __t_etitle "$@" diff --git a/lib/ulib/support/uinst2s b/lib/ulib/support/uinst2s index 8871089..c0e5787 100755 --- a/lib/ulib/support/uinst2s +++ b/lib/ulib/support/uinst2s @@ -3,8 +3,8 @@ # charger le fichier de configuration $1 pour avoir ULIBDIR source "$1" || exit 1 -source "$ULIBDIR/ulib" && urequire DEFAULTS uinst || exit 1 -OENC="$UTF8" +source "$ULIBDIR/ulib" || exit 1 +urequire DEFAULTS uinst is_root || die "Ce script doit être lancé avec les droits de root" diff --git a/lib/ulib/support/uinst2s_python b/lib/ulib/support/uinst2s_python index 78a4ded..866f4e3 100755 --- a/lib/ulib/support/uinst2s_python +++ b/lib/ulib/support/uinst2s_python @@ -3,8 +3,8 @@ # charger le fichier de configuration $1 pour avoir ULIBDIR source "$1" || exit 1 -source "$ULIBDIR/ulib" && urequire DEFAULTS uinst || exit 1 -OENC="$UTF8" +source "$ULIBDIR/ulib" || exit 1 +urequire DEFAULTS uinst is_root || die "Ce script doit être lancé avec les droits de root" diff --git a/lib/ulib/support/woinst2s b/lib/ulib/support/woinst2s index 3ced1a5..4002d5b 100755 --- a/lib/ulib/support/woinst2s +++ b/lib/ulib/support/woinst2s @@ -2,10 +2,8 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$1" || exit 1 # pour avoir la définition de ULIBDIR -source "$ULIBDIR/ulib" && -urequire DEFAULTS prefixes apache webobjects wosign || -exit 1 -OENC="$UTF8" +source "$ULIBDIR/ulib" || exit 1 +urequire DEFAULTS prefixes apache webobjects wosign is_root || die "Ce script doit être lancé avec les droits de root" diff --git a/lib/ulib/ulib b/lib/ulib/ulib index 0d396b2..c1c200e 100644 --- a/lib/ulib/ulib +++ b/lib/ulib/ulib @@ -8,7 +8,8 @@ # Ensuite, des librairies individuelles de ulib peuvent être chargées avec la # fonction urequire(), e.g. -# source /etc/ulib && urequire DEFAULTS conf || exit 1 +# source /etc/ulib || exit 1 +# urequire DEFAULTS conf # 'DEFAULTS' permet de charger base, pretty, sysinfos et compat. function eerror() { echo "error: $*" 1>&2; } @@ -18,9 +19,9 @@ function die() { [ -n "$*" ] && eerror "$*"; exit 1; } # il est possible de forcer la valeur de ULIBDIR avec FORCED_ULIBDIR. ceci est # utile avec bash 2.x qui ne supporte pas la variable BASH_SOURCE -ULIBDIR="${FORCED_ULIBDIR:-@@dest@@/ulib}" +ULIBDIR="${FORCED_ULIBDIR:-@@dest@@/lib/ulib}" -if [ "$ULIBDIR" = "@@""dest""@@/ulib" ]; then +if [ "$ULIBDIR" = "@@""dest""@@/lib/ulib" ]; then # La valeur "@@"dest"@@" n'est remplacée que dans la copie de ce script # faite dans /etc. Sinon, il faut toujours faire le calcul. Cela permet de # déplacer la librairie n'importe ou sur le disque, ce qui est diff --git a/lib/ulib/ulib_version b/lib/ulib/ulib_version index 1c611ef..6d9be94 100755 --- a/lib/ulib/ulib_version +++ b/lib/ulib/ulib_version @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Gestion de la version de ulib @@ -19,10 +21,6 @@ OPTIONS juste tester la version et ne pas afficher le message d'information." } -source "$(dirname "$0")/ulib" && -urequire DEFAULTS || -exit 1 - action=show version=0 set_version= diff --git a/lib/ulib/ulibsh b/lib/ulib/ulibsh index 22885f6..74d0914 100644 --- a/lib/ulib/ulibsh +++ b/lib/ulib/ulibsh @@ -24,9 +24,9 @@ function eerror() { echo "error: $*" 1>&2; } function die() { [ -n "$*" ] && eerror "$*"; exit 1; } -ULIBDIR="${FORCED_ULIBDIR:-@@dest@@/ulib}" +ULIBDIR="${FORCED_ULIBDIR:-@@dest@@/lib/ulib}" -if [ "$ULIBDIR" = "@@""dest""@@/ulib" ]; then +if [ "$ULIBDIR" = "@@""dest""@@/lib/ulib" ]; then ULIBDIR="${BASH_SOURCE[0]}" if [ -n "$ULIBDIR" -a -f "$ULIBDIR" ]; then ULIBDIR="$(dirname "$ULIBDIR")" diff --git a/mediawiki b/mediawiki index b2a831b..bafa49b 100755 --- a/mediawiki +++ b/mediawiki @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS awk function display_help() { uecho "$scriptname: Outils pour gérer une installation de MediaWiki @@ -42,10 +44,6 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS awk || -exit 1 - # Traduire le nom du script for script_alias in "${SCRIPT_ALIASES[@]}"; do splitpair "$script_alias" src dest diff --git a/mkRewriteRules b/mkRewriteRules index def6217..7cdf9f7 100755 --- a/mkRewriteRules +++ b/mkRewriteRules @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Créer un fichier de redirections pour Apache à partir d'un certain @@ -80,10 +82,6 @@ Dans les exemples donnés ci-dessus, $URL est l'\''url générée par la réécr et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus.' } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - proxy_enabled= infile= outfile="RewriteRules.conf" diff --git a/mkiso b/mkiso index add594c..9fdbaf9 100755 --- a/mkiso +++ b/mkiso @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: créer une image iso d'un répertoire @@ -12,10 +14,6 @@ OPTIONS créer une image hybride ISO/HFS" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - hfsmode= parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ diff --git a/mkurl b/mkurl index af5b6a7..a9dadbc 100755 --- a/mkurl +++ b/mkurl @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Enregistrer une url dans un fichier raccourci @@ -14,10 +16,6 @@ raccourci utilisable aussi sous Windows, ou avec l'extension .desktop pour compatibilité avec le standard XDG" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" diff --git a/mkusfx b/mkusfx index 96c008e..5bf5e81 100755 --- a/mkusfx +++ b/mkusfx @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Créer une archive auto-extractible qui installe son contenu avec uinst @@ -29,10 +31,6 @@ OPTIONS locale de ulib et uinst.sh" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - MAKESELFDIR="$scriptdir/lib/makeself-2.1.5" sfxtype=uinst diff --git a/mocifs b/mocifs index 526cade..3821f9e 100755 --- a/mocifs +++ b/mocifs @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Monter un partage Windows/Samba/CIFS @@ -24,10 +26,6 @@ OPTIONS Spécifier les credentials à utiliser pour la connexion" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - if ! progexists mount.cifs; then [ -x /sbin/mount.cifs ] || die "Ce script nécessite cifs-utils. Sur debian, vous pouvez l'installer avec la commande sudo apt-get install cifs-utils" diff --git a/modav b/modav index 9f79fdc..9d4fe8f 100755 --- a/modav +++ b/modav @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Monter un répertoire sur un hôte distant avec davfs @@ -38,10 +40,6 @@ OPTIONS mountpoint username password" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - if ! progexists mount.davfs; then [ -x /usr/sbin/mount.davfs ] || die "Ce script nécessite davfs2. Sur debian, vous pouvez l'installer avec la commande sudo apt-get install davfs2" diff --git a/moiso b/moiso index 2a63c55..ae5347f 100755 --- a/moiso +++ b/moiso @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Monter une image ISO @@ -18,10 +20,6 @@ OPTIONS Forcer le démontage" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - action=auto parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ diff --git a/mossh b/mossh index 89e6a26..900cab0 100755 --- a/mossh +++ b/mossh @@ -1,6 +1,6 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS function display_help() { diff --git a/mysqlcsv b/mysqlcsv index 36f6f44..d139389 100755 --- a/mysqlcsv +++ b/mysqlcsv @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Faire une requête MySQL et formater la sortie pour traitement avec awkcsv @@ -63,10 +65,6 @@ OPTIONS arguments." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - host= port= user= diff --git a/mysqlloadcsv b/mysqlloadcsv index 33d6252..3db3c1b 100755 --- a/mysqlloadcsv +++ b/mysqlloadcsv @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS awk function display_help() { uecho "$scriptname: Charger une table MySQL avec un fichier csv @@ -82,8 +84,6 @@ OPTIONS est quand même honoré." } -source "$(dirname "$0")/ulib/ulib" || exit 1; urequire DEFAULTS awk - __AWK_MYSQLFUNCS=' function format_sqlvalue(value) { if (value ~ /^[0-9]+$/) { diff --git a/openurl b/openurl index db72e7f..4bbb31c 100755 --- a/openurl +++ b/openurl @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Ouvrir une URL dans un navigateur @@ -8,10 +10,6 @@ USAGE $scriptname " } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ @ args -- "$@" && set -- "${args[@]}" || die "$args" diff --git a/profile b/profile index 04cae2b..4176d45 100644 --- a/profile +++ b/profile @@ -3,6 +3,6 @@ [ -z "$USER" -a -n "$LOGNAME" ] && export USER="$LOGNAME" function uprovide() { :; } -source @@dest@@/ulib/uenv || return +source @@dest@@/lib/ulib/uenv || return __uenv_source_dirs @@dest@@/profile.d "$HOME/etc/profile.d" __uenv_cleanup diff --git a/rruns b/rruns index f169314..b3c12b6 100755 --- a/rruns +++ b/rruns @@ -1,6 +1,6 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS runs function display_help() { diff --git a/ruinst b/ruinst index 6c52ca1..492e9e3 100755 --- a/ruinst +++ b/ruinst @@ -1,6 +1,6 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS nutools/pyulib function display_help() { diff --git a/runs b/runs index 9d48620..9fdea23 100755 --- a/runs +++ b/runs @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS runs function display_help() { uecho "$scriptname: Lancer un script avec le protocole runs @@ -56,10 +58,6 @@ Gestion des scripts -z Forcer la réinstallation des scripts qui se basent sur shouldrun/setdone" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS runs || -exit 1 - set_defaults runs function runs_path_required() { diff --git a/rwoinst b/rwoinst index 8a9b4ae..7cd2a6c 100755 --- a/rwoinst +++ b/rwoinst @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS woinst function display_help() { uecho "$scriptname: Déploiement distant avec woinst @@ -32,10 +34,6 @@ OPTIONS user@host, e.g -H user@host" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS woinst || -exit 1 - set_defaults pubkeys action=deploy diff --git a/twsync b/twsync index dcf6c87..ea4d3bc 100755 --- a/twsync +++ b/twsync @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS udir tiddlywiki javaproperties function display_help() { uecho "$scriptname: synchroniser un répertoire de wiki avec un tiddlywiki @@ -33,10 +35,6 @@ OPTIONS située dans $(ppath "$TEMPLATE")" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS udir tiddlywiki javaproperties || -exit 1 - TEMPLATE="$scriptdir/lib/tiddlywiki/empty.html" function find_wikifile() { diff --git a/uawk b/uawk index 60e4f25..9ddf93a 100755 --- a/uawk +++ b/uawk @@ -12,7 +12,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source "$(dirname "$0")/ulib/ulib" || exit 1; urequire DEFAULTS awk +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS awk # si on lance le script uawk, donner la possibilité de choisir l'outil if [ "$scriptname" == uawk ] && array_contains ALIASES "${1#l}"; then diff --git a/ubackup b/ubackup index 93f8730..53f6c65 100755 --- a/ubackup +++ b/ubackup @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: faire une sauvegarde des fichiers @@ -18,10 +20,6 @@ OPTIONS -H Arrêter la machine après une sauvegarde REUSSIE." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - action=getargs profile= HOMEDIR="$HOME" diff --git a/ucalc b/ucalc index e726a44..aad849f 100755 --- a/ucalc +++ b/ucalc @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Afficher une valeur dans plusieurs unités @@ -29,10 +31,6 @@ OPTIONS en cylindres" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - unit= ounit= cyl= diff --git a/uconf b/uconf index b8e1175..01b4d3f 100755 --- a/uconf +++ b/uconf @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS conf function display_help() { local OENC="$UTF8" @@ -51,10 +53,6 @@ OPTIONS automatiquement." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS conf || -exit 1 - action=enable quoted= type=auto diff --git a/ucrontab b/ucrontab index 97ba746..4fd29d9 100755 --- a/ucrontab +++ b/ucrontab @@ -1,5 +1,10 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +#source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +#urequire DEFAULTS crontab +# Pour pouvoir être copié le cas échéant sur un hôte distant, la librairie ulib +# est inclue avec uinc à partir de lib/ulib. En mode développement, il faut +# replier les inclusions avec uinc -f et décommenter les lignes ci-dessus function display_help() { uecho "$scriptname: Ajouter/Supprimer une ligne dans crontab @@ -84,10 +89,6 @@ OPTIONS Afficher simplement les modifications qui doivent être effectuées." } -#source "$(dirname "$0")/ulib/ulib" && -#urequire DEFAULTS crontab || -#exit 1 - DEFAULT_ADELAY=1 DEFAULT_GDELAY=15 @@ -116,6 +117,79 @@ export TMPDIR="${TMPDIR:-${TMP:-${TEMP:-/tmp}}}" [ -f /etc/nutoolsrc ] && . /etc/nutoolsrc [ -f ~/.nutoolsrc ] && . ~/.nutoolsrc +function recho() { + if [[ "${1:0:2}" == -[eEn] ]]; then + echo -n - + local first="${1:1}"; shift + echo "$first$@" + else + echo "$@" + fi +} +function recho_() { + if [[ "${1:0:2}" == -[eEn] ]]; then + echo -n - + local first="${1:1}"; shift + echo -n "$first$@" + else + echo -n "$@" + fi +} +function qval() { + local s="$*" + s="${s//\\/\\\\}" + s="${s//\"/\\\"}" + s="${s//\$/\\\$}" + s="${s//\`/\\\`}" + recho_ "$s" +} +function should_quote() { + [ -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() { + local arg first=1 + for arg in "$@"; do + [ -z "$first" ] && echo -n " " + if should_quote "$arg"; then + echo -n \" + qval "$arg" + echo -n \" + else + recho_ "$arg" + fi + first= + done +} +function qlines() { + sed "s/'/'\\\\''/g; s/.*/'&'/g" +} +function setv() { + local __s_var="$1"; shift + eval "$__s_var=\"$(qval "$*")\"" +} +function setx() { + local __s_var="$1"; shift + eval "$__s_var=\"\$(\"\$@\")\"" +} +function seta() { + local __s_array="$1"; shift + eval "$__s_array=($("$@" | qlines))" +} +function e2of() { + "$@" 2>&1 +} +function nef() { + "$@" | sed '/^$/d' +} function isnum() { [ ${#1} -gt 0 ] || return 1 @@ -140,14 +214,10 @@ function isrnum() { [ -z "$v" ] } function is_yes() { - [ "$1" == "o" -o "$1" == "O" -o "$1" == "oui" -o "$1" == "OUI" ] && return 0 - [ "$1" == "y" -o "$1" == "Y" -o "$1" == "yes" -o "$1" == "YES" ] && return 0 - [ "$1" == "v" -o "$1" == "V" -o "$1" == "vrai" -o "$1" == "VRAI" ] && return 0 - [ "$1" == "t" -o "$1" == "T" -o "$1" == "true" -o "$1" == "TRUE" ] && return 0 - [ "$1" == "on" -o "$1" == "ON" ] && return 0 - if isnum "$1"; then - [ "$1" -ne 0 ] && return 0 - fi + case "${1,,}" in + o|oui|y|yes|v|vrai|t|true|on) return 0;; + esac + isnum "$1" && [ "$1" -ne 0 ] && return 0 return 1 } function yesval() { @@ -166,14 +236,10 @@ function normyesvals() { done } function is_no() { - [ "$1" == "n" -o "$1" == "N" -o "$1" == "non" -o "$1" == "NON" ] && return 0 - [ "$1" == "no" -o "$1" == "NO" ] && return 0 - [ "$1" == "f" -o "$1" == "F" -o "$1" == "faux" -o "$1" == "FAUX" ] && return 0 - [ "$1" == "false" -o "$1" == "FALSE" ] && return 0 - [ "$1" == "off" -o "$1" == "OFF" ] && return 0 - if isnum "$1"; then - [ "$1" -eq 0 ] && return 0 - fi + case "${1,,}" in + n|non|no|f|faux|false|off) return 0;; + esac + isnum "$1" && [ "$1" -eq 0 ] && return 0 return 1 } function rawecho() { @@ -202,18 +268,6 @@ function quote_arg() { s="${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() { should_quote "$1" && echo "\"$(quote_arg "$1")\"" || quote_arg "$1" } @@ -490,6 +544,18 @@ function array_fillrange() { done array_copy "$1" __af_vs } +function array_eq() { + local -a __ae_a1 __ae_a2 + array_copy __ae_a1 "$1" + array_copy __ae_a2 "$2" + [ ${#__ae_a1[*]} -eq ${#__ae_a2[*]} ] || return 1 + local __ae_v __ae_i=0 + for __ae_v in "${__ae_a1[@]}"; do + [ "$__ae_v" == "${__ae_a2[$__ae_i]}" ] || return 1 + __ae_i=$(($__ae_i + 1)) + done + return 0 +} function array_contains() { local __ac_v eval 'for __ac_v in "${'"$1"'[@]}"; do @@ -599,14 +665,14 @@ function array_extend_lasts() { eval "$1=(\"\${$1[@]}\" \"\${$2[@]:1}\")" } function array_xsplit() { - eval "$1=($(<<<"$2" stripnl | awkrun RS="${3:-:}" ' + eval "$1=($(recho_ "$2" | awkrun RS="${3:-:}" ' { gsub(/'\''/, "'\'\\\\\'\''") print "'\''" $0 "'\''" }'))" #" } function array_split() { - eval "$1=($(<<<"$2" stripnl | awkrun RS="${3:-:}" ' + eval "$1=($(recho_ "$2" | awkrun RS="${3:-:}" ' /^$/ { next } { gsub(/'\''/, "'\'\\\\\'\''") @@ -617,14 +683,14 @@ function array_from_path() { array_split "$1" "$2" ":" } function array_from_xlines() { - eval "$1=($(<<<"$2" _nl2lf | awk ' + eval "$1=($(recho_ "$2" | _nl2lf | awk ' { gsub(/'\''/, "'\'\\\\\'\''") print "'\''" $0 "'\''" }'))" #" } function array_from_lines() { - eval "$1=($(<<<"$2" _nl2lf | awk ' + eval "$1=($(recho_ "$2" | _nl2lf | awk ' /^$/ { next } { gsub(/'\''/, "'\'\\\\\'\''") @@ -678,7 +744,7 @@ function array_fix_paths() { array_copy __afp_vs "$__afp_an" array_new "$__afp_an" for __afp_v in "${__afp_vs[@]}"; do - array_split __afp_v "$__afp_v" + array_split __afp_v "$__afp_v" "$__afp_s" array_extend "$__afp_an" __afp_v done } @@ -711,12 +777,9 @@ function parse_date() { }')" esac case "$type" in - d|date) - awk '{ print strftime("%d/%m/%Y", $0 + 0) }' <<<"$value" - ;; - l|ldap) - awk '{ print strftime("%Y%m%d%H%M%S+0400", $0 + 0) }' <<<"$value" - ;; + d|date) awk '{ print strftime("%d/%m/%Y", $0 + 0) }' <<<"$value";; + l|ldap) awk '{ print strftime("%Y%m%d%H%M%S+0400", $0 + 0) }' <<<"$value";; + m|mysql) awk '{ print strftime("%Y-%m-%d", $0 + 0) }' <<<"$value";; *) rawecho "$value" ;; @@ -986,6 +1049,13 @@ function testsame() { function testdiff() { ! quietdiff "$@" } +function testupdated() { + if [ -f "$2" ]; then + testdiff "$1" "$2" + else + return 0 + fi +} function testnewer() { test ! -e "$2" -o "$1" -nt "$2" } @@ -1076,15 +1146,16 @@ function rm_maybe() { done [ -n "$rm" ] && /bin/rm "$@" } -__CPDIR_RSYNC_ARGS=() +__CPDIR_RSYNC_SLOW=1 # synchro potentiellement plus lente, mais plus fidèle (option -c) +__CPDIR_RSYNC_ARGS=(-q) function cpdir() { if progexists rsync; then [ -d "$2" ] || mkdir -p "$2" || return 1 if [ -d "$1" ]; then - rsync -qa "${__CPDIR_RSYNC_ARGS[@]}" "$1/" "$2/" + rsync -a ${__CPDIR_RSYNC_SLOW:+-c} "${__CPDIR_RSYNC_ARGS[@]}" "$1/" "$2/" else - rsync -qa "${__CPDIR_RSYNC_ARGS[@]}" "$1" "$2/" + rsync -a ${__CPDIR_RSYNC_SLOW:+-c} "${__CPDIR_RSYNC_ARGS[@]}" "$1" "$2/" fi else __cpdir "$@" @@ -1120,17 +1191,17 @@ function __cpdir() { fi fi } -CPNOVCS_OPTS=() # deprecated -__CPNOVCS_RSYNC_ARGS=() +__CPNOVCS_RSYNC_SLOW=1 # synchro potentiellement plus lente, mais plus fidèle (option -c) +__CPNOVCS_RSYNC_ARGS=(-q) function cpnovcs() { local src="$1" destdir="$2" [ -d "$destdir" ] || mkdir -p "$destdir" || return 1 if progexists rsync; then local gitexclude=/.git/ - if [ "${src%/}" != "$src" ]; then + if [ "${src%/}" == "$src" ]; then gitexclude="/$(basename -- "$src")$gitexclude" fi - rsync -qa --exclude CVS --exclude .svn --exclude "$gitexclude" "${CPNOVCS_OPTS[@]}" "${__CPNOVCS_RSYNC_ARGS[@]}" "$src" "$destdir/" + rsync -a ${__CPNOVCS_RSYNC_SLOW:+-c} --exclude CVS/ --exclude .svn/ --exclude "$gitexclude" "${__CPNOVCS_RSYNC_ARGS[@]}" "$src" "$destdir/" elif [ "${src%/}" != "$src" ]; then __cpdir "$src" "$destdir" else @@ -1358,11 +1429,25 @@ function get_archive_appname() { print substr($0, 1, RSTART - 1) } else if (match($0, /([0-9]+([-_.][0-9]+)*([a-zA-Z][0-9]*|[-_.][0-9]+[a-zA-Z][0-9]*)?)$/)) { print substr($0, 1, RSTART - 1) + } else if (match($0, /([0-9]+[a-z][a-z][a-z0-9]?)$/, vs)) { + print substr($0, 1, RSTART - 1) } else { print $0 } }' } +function get_archive_versionsuffix() { + local basename="$(get_archive_basename "$1")" + echo "$basename" | awk '{ + if (match($0, /([-_.][0-9]+([-_.][0-9]+)*([a-zA-Z][0-9]*|[-_.][0-9]+[a-zA-Z][0-9]*)?)$/, vs)) { + print vs["1"] + } else if (match($0, /([0-9]+([-_.][0-9]+)*([a-zA-Z][0-9]*|[-_.][0-9]+[a-zA-Z][0-9]*)?)$/, vs)) { + print vs["1"] + } else if (match($0, /([0-9]+[a-z][a-z][a-z0-9]?)$/, vs)) { + print vs["1"] + } +}' +} function get_archive_version() { local basename="$(get_archive_basename "$1")" echo "$basename" | awk '{ @@ -1370,7 +1455,7 @@ function get_archive_version() { print vs["1"] } else if (match($0, /([0-9]+([-_.][0-9]+)*([a-zA-Z][0-9]*|[-_.][0-9]+[a-zA-Z][0-9]*)?)$/, vs)) { print vs["1"] - } else if (match($0, /([0-9]+[a-z][a-z][a-z]?)$/, vs)) { + } else if (match($0, /([0-9]+[a-z][a-z][a-z0-9]?)$/, vs)) { print vs["1"] } }' @@ -1591,6 +1676,13 @@ function quote_sql(s) {'" gsub(/'/, \"''\", s) return \"'\" s \"'\" "'} +function unquote_mysqlcsv(s) { + gsub(/\\n/, "\n", s) + gsub(/\\t/, "\t", s) + gsub(/\\0/, "\0", s) + gsub(/\\\\/, "\\", s) + return s +} function array_new(dest) { dest[0] = 0 # forcer awk à considérer dest comme un tableau delete dest @@ -1894,7 +1986,7 @@ function array_formatcsv2(fields, colsep, mvsep, qchar, echar, count, indic if (echar != "") gsub(qchar, quote_subrepl(echar) "&", value); else gsub(qchar, "&&", value); } - if (qchar != "" && (index(value, mvsep) != 0 || index(value, colsep) != 0 || __csv_should_quote(value))) { + if (qchar != "" && (index(value, mvsep) != 0 || index(value, colsep) != 0 || index(value, qchar) != 0 || __csv_should_quote(value))) { line = line qchar value qchar } else { line = line value @@ -2068,12 +2160,12 @@ function awkdef() { } function lawkrun() { local -a __ar_defs __ar_args - while [ -n "$1" -a "$1" != "--" ]; do + while [ $# -gt 0 -a "$1" != "--" ]; do __ar_defs=("${__ar_defs[@]}" "$1") shift done shift - while [ -n "$1" ]; do + while [ $# -gt 0 ]; do __ar_args=("${__ar_args[@]}" "$1") shift done @@ -2428,6 +2520,13 @@ function pidfile_check() { fi return 1 } +function page_maybe() { + if isatty; then + less -XF + else + cat + fi +} function utools_local() { @@ -2725,6 +2824,29 @@ function eecho_() { function edebug() { show_debug || return; eflush; __edebug "$*" 1>&2 } +function trace() { + local r cmd="$(quoted_args "$@")" + show_info && { eflush; __eecho "\$ $cmd" 1>&2; } + "$@"; r=$? + if [ $r -ne 0 ]; then + if show_info; then + eflush; __eecho "^ [EC #$r]" 1>&2 + elif show_error; then + eflush; __eecho "^ $cmd [EC #$r]" 1>&2; + fi + fi + return $r +} +function trace_error() { + local r + "$@"; r=$? + if [ $r -ne 0 ]; then + local cmd="$(quoted_args "$@")" + show_error && { eflush; __eecho "^ $cmd [EC #$r]" 1>&2; } + fi + return $r +} + function etitle() { local __t_deferred= __t_etitle "$@" @@ -4185,8 +4307,8 @@ BEGIN { match_indented = 0 } -/^(export[ \t]+)?[a-zA-Z_][a-zA-Z0-9_]*[-+%#]=/ { - match($0, /^(export[ \t]+)?([a-zA-Z_][a-zA-Z0-9_]*)([-+%#])=(.*)$/, parts) +/^(export[ \t]+)?[a-zA-Z_][a-zA-Z0-9_]*[-+%#?]=/ { + match($0, /^(export[ \t]+)?([a-zA-Z_][a-zA-Z0-9_]*)([-+%#?])=(.*)$/, parts) name = parts[2] type = parts[3] value = parts[4] @@ -4196,6 +4318,8 @@ BEGIN { print "uinspath " value " " name } else if (type == "-") { print "udelpath " value " " name + } else if (type == "?") { + print "[ -n \"$" name "\" ] || " name "=" value } print "export " name next diff --git a/udir b/udir index b1e1d82..1ac2c12 100755 --- a/udir +++ b/udir @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS udir function display_help() { uecho "$scriptname: gérer les variables de répertoire @@ -116,10 +118,6 @@ root_scripts destination." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS udir || -exit 1 - action=auto parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ diff --git a/udist b/udist index 42a70cd..2ce0402 100755 --- a/udist +++ b/udist @@ -145,9 +145,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source $(dirname "$0")/ulib/ulib && -urequire DEFAULTS conf install || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS conf install INSTALL_VERBOSE= INSTALL_USES_PPATH=1 diff --git a/uenv b/uenv index 3f10a7c..05a7a48 100755 --- a/uenv +++ b/uenv @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS uenv uenv_update function display_help() { uecho "$scriptname: Mettre à jour la configuration de l'environnement @@ -27,10 +29,6 @@ OPTIONS nutools." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS uenv uenv_update || -exit 1 - parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -u update \ diff --git a/ufixchars b/ufixchars index 3e49cad..921373e 100755 --- a/ufixchars +++ b/ufixchars @@ -1,6 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1; urequire DEFAULTS +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Enlever ou transformer certaines classes de caractères d'un flux encodé en UTF-8 diff --git a/ugenpass b/ugenpass index aeba787..c0e6c79 100755 --- a/ugenpass +++ b/ugenpass @@ -1,6 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1; urequire DEFAULTS password +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS password function display_help() { uecho "$scriptname: générer un mot de passe au hasard diff --git a/uinc b/uinc index adb099f..7c088aa 100755 --- a/uinc +++ b/uinc @@ -1,9 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -source "$(dirname "$0")/ulib/ulib" && -urequire uinc || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire uinc export UINCPATH="$ULIBDIR${UINCPATH:+:$UINCPATH}" uinc "$@" diff --git a/uinc.sh b/uinc.sh index 4c8d2ae..cce16e4 100755 --- a/uinc.sh +++ b/uinc.sh @@ -1,12 +1,9 @@ #!/bin/sh # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - # Version de uinc qui fonctionne avec /bin/sh. Le contrôle est transmis à # bash, qui est recherché dans une liste de répertoires standards - -. `dirname "$0"`/ulib/ulibsh && -urequire DEFAULTS uinc || -exit 1 +. `dirname "$0"`/lib/ulib/ulibsh || exit 1 +urequire DEFAULTS uinc export UINCPATH="$ULIBDIR${UINCPATH:+:$UINCPATH}" uinc "$@" diff --git a/uinst b/uinst index 9e47bc2..8401fa3 100755 --- a/uinst +++ b/uinst @@ -1,8 +1,6 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS uinst || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS uinst uinst_nolocal "$@" diff --git a/uinst.sh b/uinst.sh index 70423a2..7bf2408 100755 --- a/uinst.sh +++ b/uinst.sh @@ -1,11 +1,8 @@ #!/bin/sh # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - # Version de uinst qui fonctionne avec /bin/sh. Le contrôle est transmis à # bash, qui est recherché dans une liste de répertoires standards - -. `dirname "$0"`/ulib/ulibsh && -urequire DEFAULTS uinst || -exit 1 +. `dirname "$0"`/lib/ulib/ulibsh || exit 1 +urequire DEFAULTS uinst uinst_nolocal "$@" diff --git a/ujava b/ujava index 4d24b25..9e5317a 100755 --- a/ujava +++ b/ujava @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS java function display_help() { uecho "$scriptname: Lancer un script après avoir sélectionné une version de java @@ -24,10 +26,6 @@ Si args n'est pas spécifié, un shell est lancé dans lequel les variables JAVA_HOME, JAVA, JAVAC et PATH sont mis à jour." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS java || -exit 1 - bits= exact= parse_opts + "${PRETTYOPTS[@]}" \ diff --git a/uldap b/uldap index 6d3bdf0..befeb1d 100755 --- a/uldap +++ b/uldap @@ -1,9 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS ldif prefixes ldap || -exit 255 +source "$(dirname "$0")/lib/ulib/ulib" || exit 255 +urequire DEFAULTS ldif prefixes ldap ################################################################################ # Fonctions utilitaire diff --git a/ulibshell b/ulibshell index 57e7613..bf8ac66 100755 --- a/ulibshell +++ b/ulibshell @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Lancer un shell après avoir chargé des modules de ulib @@ -18,10 +20,6 @@ est modifié pour que $scriptdir soit ajouté en premier. Les arguments sont passés inchangés au shell." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - parse_opts + "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -r: modules \ diff --git a/ulibsync b/ulibsync index 62fb075..a1de515 100755 --- a/ulibsync +++ b/ulibsync @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Copier les librairies ulib et/ou pyulib @@ -14,10 +16,6 @@ OPTIONS Copier pyulib" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -u,--ulib ulib \ diff --git a/ulibversion b/ulibversion index 3725057..fe48f80 100755 --- a/ulibversion +++ b/ulibversion @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Gestion de la version de ulib @@ -18,10 +20,6 @@ OPTIONS juste tester la version et ne pas afficher le message d'information." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - action=show system= min_version= diff --git a/umatch b/umatch index 48ade6a..af3b7ae 100755 --- a/umatch +++ b/umatch @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Afficher le résultat d'une recherche par regexp et compter @@ -49,10 +51,6 @@ OPTIONS une ligne '--'" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - function match() { local regexp="$1" sep="$2" awkrun ${sep:+FS="$sep"} '{ diff --git a/umirror b/umirror index 31bce72..024374d 100755 --- a/umirror +++ b/umirror @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: faire un miroir d'un site web @@ -12,10 +14,6 @@ OPTIONS Convertir les liens pour consultation locale" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - local= parse_opts + "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ diff --git a/update-nutools b/update-nutools index 6ef86ee..41bd5f5 100755 --- a/update-nutools +++ b/update-nutools @@ -69,4 +69,5 @@ if [ -n "$clonerepo" ]; then cd .. rm -rf "$NAME" fi +# IMPORTANT: la ligne suivante ne doit pas se terminer par un retour à la ligne: rm "$0"; exit 0 \ No newline at end of file diff --git a/uprefix b/uprefix index 69bd0bd..b0ef1a9 100755 --- a/uprefix +++ b/uprefix @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS PREFIXES-DEFAULTS function display_help() { uecho "$scriptname: Afficher les préfixes valides pour uinst @@ -16,10 +18,6 @@ OPTIONS Afficher la valeur du préfixe spécifié" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS PREFIXES-DEFAULTS || -exit 1 - action=expand parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ diff --git a/uproject b/uproject index eacb3fb..df58291 100755 --- a/uproject +++ b/uproject @@ -138,9 +138,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS modeline vcs || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS modeline vcs # Traduire le nom du script for script_alias in "${SCRIPT_ALIASES[@]}"; do diff --git a/uscrontab b/uscrontab index 639c536..a9dbf29 100755 --- a/uscrontab +++ b/uscrontab @@ -1,6 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1; urequire DEFAULTS crontab +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS crontab function display_help() { uecho "$scriptname: lancer une suite de commande en respectant une planification de type cron diff --git a/ussh b/ussh index 0137abe..c5de8af 100755 --- a/ussh +++ b/ussh @@ -1,6 +1,6 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS function display_help() { diff --git a/usysinfos b/usysinfos index 0261fba..740605a 100755 --- a/usysinfos +++ b/usysinfos @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Afficher les informations sur le système @@ -13,10 +15,6 @@ requête. Voir la doc de check_sysinfos() pour le format de la requête. Sinon, afficher les informations sur le système courant." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - [ $# -eq 1 -a "$1" == "--help" ] && exit_with display_help if [ -n "$*" ]; then diff --git a/utempl b/utempl index b37df0d..06323de 100755 --- a/utempl +++ b/utempl @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Créer un nouveau fichier à partir d'un modèle @@ -22,10 +24,6 @@ utilisé pour créer le nouveau fichier. Utiliser l'option --help pour avoir une description des options disponibles." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - template= edit=auto overwrite= diff --git a/utrigger b/utrigger index cda0ec7..6b83fad 100755 --- a/utrigger +++ b/utrigger @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire base pretty function display_help() { uecho "$scriptname: lancer une commande en différé @@ -47,10 +49,6 @@ OPTIONS train de tourner, cette option n'a aucun effet." } -source "$(dirname "$0")/ulib/ulib" && -urequire base pretty || -exit 1 - RUNDELAY=5 function acquire_lock() { diff --git a/uversion b/uversion index acb28fb..a0af66f 100755 --- a/uversion +++ b/uversion @@ -1,6 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -source "$(dirname "$0")/ulib/ulib" || exit 1; urequire DEFAULTS semver +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS semver function display_help() { uecho "$scriptname: gérer des numéros de version selon les règles du versionnage sémantique v2.0.0 (http://semver.org/) diff --git a/vzusage b/vzusage index 8e6f297..dd34c67 100755 --- a/vzusage +++ b/vzusage @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: afficher des informations sur une machine virtuelle OpenVZ @@ -19,10 +21,6 @@ OPTIONS beancounters" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - default=1 bc= show_failed= diff --git a/woArchive b/woArchive index a190bf3..8723f97 100755 --- a/woArchive +++ b/woArchive @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: créer une archive de la distribution WebObjects en cours @@ -15,10 +17,6 @@ OPTIONS \$NAME.files" } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - name= files= parse_opts "${PRETTYOPTS[@]}" \ diff --git a/woSwitch b/woSwitch index 3a2c357..6343612 100755 --- a/woSwitch +++ b/woSwitch @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS function display_help() { uecho "$scriptname: Changer la version de WebObjects pour le système en cours @@ -27,10 +29,6 @@ Ensuite, les répertoires Applications et Configuration sont restaurés. Il faud restaurer Extensions manuellement." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 - nocheck= from= to= diff --git a/woctl b/woctl index 060147b..8561b71 100755 --- a/woctl +++ b/woctl @@ -89,9 +89,8 @@ if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then exit 0 fi -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS # Traduire le nom du script for script_alias in "${SCRIPT_ALIASES[@]}"; do diff --git a/woinst b/woinst index 44e9f18..482b8c6 100755 --- a/woinst +++ b/woinst @@ -1,8 +1,6 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 - -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS woinst || -exit 1 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS woinst woinst "$@" diff --git a/wosign b/wosign index c5837aa..bcb8488 100755 --- a/wosign +++ b/wosign @@ -1,5 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +source "$(dirname "$0")/lib/ulib/ulib" || exit 1 +urequire DEFAULTS prefixes apache webobjects java wosign function display_help() { uecho "$scriptname: signer les jars d'un bundle @@ -18,10 +20,6 @@ OPTIONS accessible en écriture, relancer le script en root." } -source "$(dirname "$0")/ulib/ulib" && -urequire DEFAULTS prefixes apache webobjects java wosign || -exit 1 - sign= unsign= resign=