Intégration de la branche release-6.2.0
This commit is contained in:
commit
35c98a2f8e
35
CHANGES.md
35
CHANGES.md
|
@ -1,3 +1,38 @@
|
|||
## Version 6.2.0 du 13/03/2017-11:27
|
||||
|
||||
* `4a7b14b` ajouter un argument force à testupdated et testnewer
|
||||
* `8a6678c` ruinst et rwoinst: piloter l'interaction distante à partir du paramétrage local
|
||||
* `e9b574d` rwoinst: intégrer des fonctionnalités de ruinst; support préliminaire de deploy
|
||||
* `2561f67` ruinst: utiliser la configuration ruinst par défaut pour deploy
|
||||
* `38f21aa` ruinst: support de deploy pour calculer l'hôte pour le déploiement
|
||||
* `d5846ba` deploy: possibilité de filtrer les variables à afficher. en cas d'échec, afficher false pour faciliter l'utilisation avec eval()
|
||||
* `8fa58e2` quelques corrections sur deploy
|
||||
* `20df6c4` support du depot deploy
|
||||
* `3a24e83` régression dans set_array_cmd()
|
||||
* `31fb39d` réorganiser certaines fonctions
|
||||
* `528d579` ajout des fonctions seta(), _seta(), echo_seta()
|
||||
* `a43359c` maj doc
|
||||
* `2177e6a` cesser d'utiliser des fonctions obsolètes
|
||||
* `9a777b3` cosmetic
|
||||
* `a5fcf78` ajout de evali()
|
||||
* `af3bb37` ajout de evals()
|
||||
* `fbad986` corriger un problème potentiel avec should_quote()
|
||||
* `f570438` bug avec recho -n; maj doc
|
||||
* `3d1b826` cosmetic
|
||||
* `e800376` cosmetic
|
||||
* `0805f4f` SVirtualBox: ajout de l'option -r pour relancer avec restauration du snapshot
|
||||
* `225060c` utempl/www: correction des options et modification cosmétique
|
||||
* `ad88c99` Intégration de la branche update-templates
|
||||
* `532d21d` support de la génération de pages html avec bootstrap
|
||||
* `c52031b` maj de la description
|
||||
* `ca4de19` Intégration de la branche update-apacheconfig
|
||||
* `02f52af` afficher un menu si plusieurs répertoires de templates sont disponibles
|
||||
* `6192c0a` description des modifications à apporter
|
||||
* `f2b6381` SVirtualBox: démarrer en mode separate par défaut
|
||||
* `7a38535` support des hôtes de l'université
|
||||
* `b6b7fa9` uscrontab: support de l'option -G pour les tests
|
||||
* `e58ff74` maj du template pour runs
|
||||
|
||||
## Version 6.1.0 du 13/02/2017-17:06
|
||||
|
||||
* `748c2f7` Intégration de la branche update-network
|
||||
|
|
82
SVirtualBox
82
SVirtualBox
|
@ -10,19 +10,38 @@ USAGE
|
|||
$scriptname [options] vmName
|
||||
|
||||
OPTIONS
|
||||
-n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l Lister les machines virtuelles
|
||||
-s Démarrer la machine virtuelle (par défaut)
|
||||
-n, --nop
|
||||
Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l, --list
|
||||
Lister les machines virtuelles
|
||||
-s, --start
|
||||
Démarrer la machine virtuelle. C'est l'action par défaut.
|
||||
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||
affiché
|
||||
-b Démarrer la VM sans interface graphique. Cette option n'est valide
|
||||
qu'avec -s
|
||||
-k Arrêter la machine virtuelle (par ACPI)
|
||||
-p Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H Arrêter sauvagement la machine virtuelle
|
||||
-R Redémarrer sauvagement la machine virtuelle
|
||||
-S Enregistrer l'état de la machine virtuelle
|
||||
-g Afficher le gestionnaire de machines virtuelle"
|
||||
-x, --gui
|
||||
-b, --headless
|
||||
--separate
|
||||
Ces options ne sont valides qu'avec -s et permettent de spécifier le
|
||||
type de démarrage: 'gui' permet d'afficher une fenêtre complète dans
|
||||
laquelle l'accélération graphique est supportée, headless démarre la
|
||||
machine en tâche de fond, et separate affiche une fenêtre qui attaque la
|
||||
machine démarrée en tâche de fond. --separate est l'option par défaut.
|
||||
-k, -t, --stop
|
||||
Arrêter la machine virtuelle. Les options -p, -H, -R, -S et -r
|
||||
permettent de spécifier le type d'arrêt de la machine virtuelle
|
||||
-p, --sleep
|
||||
Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H, --poweroff
|
||||
Arrêter sauvagement la machine virtuelle
|
||||
-R, --reset
|
||||
Redémarrer sauvagement la machine virtuelle
|
||||
-S, --savestate
|
||||
Enregistrer l'état de la machine virtuelle
|
||||
-r, --rrestart
|
||||
Arrêter la machine, restaurer l'état du dernier snapshot puis la
|
||||
relancer.
|
||||
-g, --gui
|
||||
Afficher le gestionnaire de machines virtuelle"
|
||||
}
|
||||
|
||||
function build_arrays() {
|
||||
|
@ -62,20 +81,24 @@ function start_virtualbox() {
|
|||
}
|
||||
|
||||
action=start
|
||||
type=separate
|
||||
stopaction=acpipowerbutton
|
||||
headless=
|
||||
restore=
|
||||
parse_opts + "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
-n action=nop \
|
||||
-n,--nop action=nop \
|
||||
-l,--list action=list \
|
||||
-s,--start action=start \
|
||||
-b,--background,--headless headless=1 \
|
||||
-x,--gui type=gui \
|
||||
-b,--background,--headless type=headless \
|
||||
--separate type=separate \
|
||||
-k,-t,--stop '$action=stop; stopaction=acpipowerbutton' \
|
||||
-p,--sleep '$action=stop; stopaction=acpisleepbutton' \
|
||||
-H '$action=stop; stopaction=poweroff' \
|
||||
-R '$action=stop; stopaction=reset' \
|
||||
-S '$action=stop; stopaction=savestate' \
|
||||
-g action=gui \
|
||||
-H,--poweroff '$action=stop; stopaction=poweroff' \
|
||||
-R,--reset '$action=stop; stopaction=reset' \
|
||||
-S,--savestate '$action=stop; stopaction=savestate' \
|
||||
-r,--rrestart '$action=stop; restore=1' \
|
||||
-g,--gui action=gui \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
"$scriptdir/EnsureVM" virtualbox || die
|
||||
|
@ -110,8 +133,8 @@ $(array_join rvms "
|
|||
fi
|
||||
|
||||
if [ -n "$vm" ]; then
|
||||
estep "Démarrage de $vm${headless:+ en tâche de fond}"
|
||||
VBoxManage -q startvm ${headless:+--type headless} "$vm" "$@"
|
||||
estep "Démarrage de $vm de type $type"
|
||||
VBoxManage -q startvm --type "$type" "$vm" "$@"
|
||||
else
|
||||
ewarn "Aucune VM à démarrer n'a été trouvée"
|
||||
fi
|
||||
|
@ -120,10 +143,23 @@ elif [ "$action" == stop ]; then
|
|||
if [ -z "$vm" -a "${rvms[*]}" ]; then
|
||||
select_vm rvms vm "Choisissez la VM à arrêter avec la méthode $stopaction"
|
||||
fi
|
||||
[ -n "$vm" ] || die
|
||||
|
||||
if [ -n "$vm" ]; then
|
||||
estep "Arrêt de $vm avec la méthode $stopaction"
|
||||
VBoxManage -q controlvm "$vm" "$stopaction"
|
||||
estep "Arrêt de $vm avec la méthode $stopaction"
|
||||
VBoxManage -q controlvm "$vm" "$stopaction" || die
|
||||
if [ -n "$restore" ]; then
|
||||
ebegin "Attente de l'arrêt"
|
||||
while true; do
|
||||
build_arrays
|
||||
array_contains svms "$vm" && break
|
||||
edot 0
|
||||
sleep 1
|
||||
done
|
||||
eend
|
||||
estep "Restauration du snapshot"
|
||||
VBoxManage -q snapshot "$vm" restorecurrent || die
|
||||
estep "Démarrage"
|
||||
VBoxManage -q startvm --type "$type" "$vm"
|
||||
fi
|
||||
|
||||
elif [ "$action" == gui ]; then
|
||||
|
|
|
@ -1 +1 @@
|
|||
6.1.0
|
||||
6.2.0
|
||||
|
|
22
apacheconfig
22
apacheconfig
|
@ -220,6 +220,28 @@ elif [ "$action" == deploy -o "$action" == localhosts ]; then
|
|||
elif [ "$action" == new-site ]; then
|
||||
host="$site_host"
|
||||
templdir="$site_templdir"
|
||||
|
||||
if [ -z "$templdir" -a -d "$destdir/templates" ]; then
|
||||
# si on ne précise pas le template à utiliser, alors afficher
|
||||
# éventuellement un menu si plusieurs templates sont disponibles
|
||||
templdirs=()
|
||||
if [ -n "$(list_all "$destdir/templates" "*SITE*")" ]; then
|
||||
array_add templdirs templates
|
||||
templdir=templates
|
||||
fi
|
||||
array_from_lines stempldirs "$(list_dirs "$destdir/templates" | grep -v SITE)"
|
||||
for stempldir in "${stempldirs[@]}"; do
|
||||
if [ -n "$(list_all "$destdir/templates/$stempldir" "*SITE*")" ]; then
|
||||
array_add templdirs "templates/$stempldir"
|
||||
[ -n "$templdir" ] || templdir="templates/$stempldir"
|
||||
fi
|
||||
done
|
||||
if [ ${#templdirs[*]} -gt 1 ]; then
|
||||
simple_menu templdir templdirs -t "Choix du répertoire des modèles" -m "Veuillez choisir le modèle à utiliser"
|
||||
fi
|
||||
templdir="$destdir/$templdir"
|
||||
fi
|
||||
|
||||
if [[ "$templdir" != */* ]] && [ -d "$destdir/templates/$templdir" ]; then
|
||||
templdir="$destdir/templates/$templdir"
|
||||
elif [ -z "$templdir" ]; then
|
||||
|
|
|
@ -161,11 +161,11 @@ $(qvals "./$scriptname" ${pkstring:+-s "$pkstring"} ${luser:+-l} "$user")" >"$wo
|
|||
|
||||
estep "Exécution du script"
|
||||
"${ssh[@]}" "$remoteuser@$host" "\
|
||||
__estack=$(quoted_arg "$__estack")
|
||||
__tlevel=$(quoted_arg "$__tlevel")
|
||||
__estack=$(qval "$__estack")
|
||||
__tlevel=$(qval "$__tlevel")
|
||||
export __estack __tlevel
|
||||
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
|
||||
}$(quoted_args "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
|
||||
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
|
||||
r=$?
|
||||
ac_clean "$workdir"
|
||||
|
||||
|
|
2
cssh
2
cssh
|
@ -23,7 +23,7 @@ vars="$("$scriptdir/ussh" --parse "$@")" || die
|
|||
eval "$vars"
|
||||
[ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter"
|
||||
|
||||
cmd="'$(quoted_args "${args[@]}")
|
||||
cmd="'$(qvals "${args[@]}")
|
||||
"'
|
||||
function __ask() {
|
||||
local r
|
||||
|
|
|
@ -7,19 +7,38 @@ USAGE
|
|||
SVirtualBox [options] vmName
|
||||
|
||||
OPTIONS
|
||||
-n Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l Lister les machines virtuelles
|
||||
-s Démarrer la machine virtuelle (par défaut)
|
||||
-n, --nop
|
||||
Ne rien faire excepté s'assurer que les modules VirtualBox sont chargés
|
||||
-l, --list
|
||||
Lister les machines virtuelles
|
||||
-s, --start
|
||||
Démarrer la machine virtuelle. C'est l'action par défaut.
|
||||
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
|
||||
affiché
|
||||
-b Démarrer la VM sans interface graphique. Cette option n'est valide
|
||||
qu'avec -s
|
||||
-k Arrêter la machine virtuelle (par ACPI)
|
||||
-p Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H Arrêter sauvagement la machine virtuelle
|
||||
-R Redémarrer sauvagement la machine virtuelle
|
||||
-S Enregistrer l'état de la machine virtuelle
|
||||
-g Afficher le gestionnaire de machines virtuelle
|
||||
-x, --gui
|
||||
-b, --headless
|
||||
--separate
|
||||
Ces options ne sont valides qu'avec -s et permettent de spécifier le
|
||||
type de démarrage: 'gui' permet d'afficher une fenêtre complète dans
|
||||
laquelle l'accélération graphique est supportée, headless démarre la
|
||||
machine en tâche de fond, et separate affiche une fenêtre qui attaque la
|
||||
machine démarrée en tâche de fond. --separate est l'option par défaut.
|
||||
-k, -t, --stop
|
||||
Arrêter la machine virtuelle. Les options -p, -H, -R, -S et -r
|
||||
permettent de spécifier le type d'arrêt de la machine virtuelle
|
||||
-p, --sleep
|
||||
Mettre en veille la machine virtuelle (par ACPI)
|
||||
-H, --poweroff
|
||||
Arrêter sauvagement la machine virtuelle
|
||||
-R, --reset
|
||||
Redémarrer sauvagement la machine virtuelle
|
||||
-S, --savestate
|
||||
Enregistrer l'état de la machine virtuelle
|
||||
-r, --rrestart
|
||||
Arrêter la machine, restaurer l'état du dernier snapshot puis la
|
||||
relancer.
|
||||
-g, --gui
|
||||
Afficher le gestionnaire de machines virtuelle
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -0,0 +1,29 @@
|
|||
# create-user
|
||||
|
||||
~~~
|
||||
create-user: créer un utilisateur sudoer et lui installer une clé publique ssh
|
||||
|
||||
USAGE
|
||||
create-user user [-p pubkey]
|
||||
|
||||
OPTIONS
|
||||
-p, --pkfile PKFILE
|
||||
Installer la clé publique ssh contenue dans le fichier spécifié. Par
|
||||
défaut, prendre le fichier ~/.ssh/id_rsa.pub de l'utilisateur courant.
|
||||
-s, --pkstring PUBKEY
|
||||
Installer la clé publique ssh spécifiée. Cette option avancée n'est pas
|
||||
utilisée en temps normal. Elle a la priorité sur l'option --pkfile
|
||||
-l, --luser
|
||||
Ne pas donner à l'utilisateur le droit de sudoer.
|
||||
-h, --host [USER@]HOST
|
||||
Créer l'utilisateur sur l'hôte distant spécifié. Si l'utilisateur
|
||||
distant n'est pas root, il doit être sudoer.
|
||||
-T, --tmproot TMPROOT
|
||||
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
|
||||
/var/tmp. Cette option est utile pour certains serveurs, qui ont un /tmp
|
||||
minuscule.
|
||||
-S, --ssh SSH
|
||||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -0,0 +1,45 @@
|
|||
# netconfig
|
||||
|
||||
~~~
|
||||
netconfig: gérer la configuration du réseau
|
||||
|
||||
USAGE
|
||||
netconfig -c network.conf
|
||||
netconfig [iface:]ip[/suffix]...
|
||||
|
||||
OPTIONS
|
||||
-P, --partial
|
||||
Activer le mode de configuration partielle. C'est la valeur par défaut.
|
||||
Dans ce mode, la configuration courante n'est pas modifiée. Seules de
|
||||
nouvelles adresses ips sont configurées le cas échéant.
|
||||
-F, --full
|
||||
Activer le mode de configuration complète. Dans ce mode, le nom d'hôte
|
||||
ainsi que toutes les interfaces, pont et adresses sont configurés.
|
||||
-z, --reset
|
||||
En mode full, recréer le fichier /etc/network/interfaces au lieu
|
||||
d'essayer de le mettre à jour.
|
||||
-l, --inline
|
||||
Prendre la configuration depuis la ligne de commande. C'est la valeur
|
||||
par défaut, sauf si un fichier network.conf existe dans le répertoire
|
||||
courant.
|
||||
Dans ce mode, chaque argument est une spécification d'adresse IP à
|
||||
configurer. Les autres paramètres i.e les ponts, le nom d'hôte et le
|
||||
contenu du fichier /etc/networks sont spécifiés avec les options -b,
|
||||
-h et -e
|
||||
-c, --config CONFIG
|
||||
Spécifier le fichier de configuration à utiliser pour la configuration
|
||||
du réseau. Cette option est automatiquement activée si le répertoire
|
||||
courant contient un fichier network.conf
|
||||
-w, --write
|
||||
Ecrire la configuration actuelle dans le fichier network.conf
|
||||
Note: comme ce script demande les droits de root, le fichier sera écrit
|
||||
avec le propriétaire root.
|
||||
-b, --bridge BR:IFACES
|
||||
En mode inline, spécifier une liste de ponts à configurer.
|
||||
-h, --host HOST
|
||||
En mode inline, spécifier le nom d'hôte pleinement qualifié
|
||||
-e, --etc-networks CONTENT
|
||||
Spécifier un contenu pour remplacer le fichier /etc/networks
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -6,13 +6,24 @@ umountr: démonter un système de fichier récursivement
|
|||
USAGE
|
||||
umountr mountpoint
|
||||
|
||||
Démonter tous les systèmes de fichiers qui sont montés en-dessous de mountpoint
|
||||
puis démonter mountpoint. Démonter aussi tous les systèmes de fichiers
|
||||
bind-montés à partir d'un sous-répertoire de mountpoint.
|
||||
|
||||
OPTION
|
||||
-c, --continuous
|
||||
Continuer même en cas d'erreur
|
||||
-r, --recursive
|
||||
-1, --no-recursive
|
||||
Spécifier le type de démontage:
|
||||
Avec -1, un démontage simple est effectué, comme avec umount. Ce type de
|
||||
démontage est automatiquement sélectionné pour les systèmes de fichier
|
||||
montés sous le répertoire /media
|
||||
Avec -r, le démontage est récursif: tous les systèmes de fichiers qui
|
||||
sont montés en-dessous de mountpoint sont démontés puis mountpoint est
|
||||
démonté. Tous les systèmes de fichiers bind-montés à partir d'un sous-
|
||||
répertoire de mountpoint sont démontés aussi.
|
||||
-o, --poweroff
|
||||
-k, --no-poweroff
|
||||
Après avoir démonté le système de fichier mountpoint, éteindre le
|
||||
périphérique qui y correspond. --poweroff est automatiquement activé
|
||||
pour les systèmes de fichier montés sous le répertoire /media
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -56,11 +56,13 @@ COMMANDS
|
|||
-R Afficher les modifications effectuées depuis la dernière release.
|
||||
|
||||
clone git@host:path/to/repo [destdir]
|
||||
clone http://host/gituser/path/to/repo [destdir]
|
||||
Cloner un dépôt distant. Basculer sur la branche develop si elle existe.
|
||||
Initialiser git annex si le dépôt contient des fichiers annexés.
|
||||
Récupérer aussi ces fichiers avec 'git annex get'
|
||||
|
||||
crone git@host:path/to/repo [destdir]
|
||||
crone http://host/gituser/path/to/repo [destdir]
|
||||
Créer un dépôt distant sur gitolite, puis le cloner
|
||||
|
||||
develop
|
||||
|
|
|
@ -283,6 +283,12 @@ OPTIONS AVANCEES
|
|||
référence. Il faut respecter le format, sinon les résultats ne sont pas
|
||||
garantis. Le mieux est de reprendre le résultat de l'option --show-ctnow
|
||||
en le modifiant un peu si nécessaire.
|
||||
-G, --any-ctnow
|
||||
Pour le développement ou des tests, lancer toutes les commandes dans
|
||||
l'ordre sans tenir compte de l'heure de référence. Cette commande ne
|
||||
devrait pas être utilisée en temps normal, mais elle existe pour
|
||||
simplifier les tests avec --show-ctnow + --force-ctnow dans les cas
|
||||
simples.
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -77,8 +77,9 @@ syntaxe 'setx -a array=cmd args...' est supportée aussi
|
|||
~~~
|
||||
Implémenter une syntaxe lisible et naturelle permettant d'enchainer des
|
||||
traitements sur une valeur. Par exemple, la commande
|
||||
evalx cmd1... // cmd2... // cmd3...
|
||||
affiche le résultat de la commande "$(cmd3 $(cmd2 $(cmd1)))"
|
||||
evalx cmd1 [args1...] // cmd2 [args2...] // cmd3 [args3...]
|
||||
est équivalente à la commande
|
||||
cmd3 args3 "$(cmd2 args2 "$(cmd1 args1)")"
|
||||
Retourner le dernier code d'erreur non nul, ou 0 si toutes les commandes se
|
||||
sont exécutées sans erreur.
|
||||
~~~
|
||||
|
@ -92,7 +93,7 @@ Implémenter une syntaxe alternative permettant d'enchainer des traitements sur
|
|||
un flux de données. Par exemple, la commande
|
||||
evalp cmd1... // cmd2... // cmd3...
|
||||
affiche le résultat de la commande "$(cmd1 | cmd2 | cmd3)"
|
||||
Typiquement, cette fonction permet de faciliter la construction d'un
|
||||
Typiquement, cette fonction permet de faciliter la *construction* d'un
|
||||
enchainement de commandes par programme, ou de faciliter l'utilisation de la
|
||||
fonction setx() pour récupérer le résultat d'un enchainement. Dans les autres
|
||||
cas, il est plus simple et naturel d'écrire les enchainements avec la syntaxe
|
||||
|
|
|
@ -13,5 +13,9 @@ retourner vrai si $1 est une valeur numérique entière positive
|
|||
retourner vrai si $1 est une valeur numérique réelle (positive ou négative)
|
||||
le séparateur décimal peut être . ou ,
|
||||
~~~
|
||||
## `evali`
|
||||
~~~
|
||||
Evaluer une expression numérique
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -2,27 +2,27 @@
|
|||
|
||||
## `straddp`
|
||||
~~~
|
||||
ajouter le préfixe $1 à $2*
|
||||
ajouter le préfixe $1 à $2..*
|
||||
~~~
|
||||
## `strdelp`
|
||||
~~~
|
||||
enlever le préfixe $1 à $2*
|
||||
enlever le préfixe $1 à $2..*
|
||||
~~~
|
||||
## `strdelp2`
|
||||
~~~
|
||||
enlever le préfixe $1 le plus long à $2*
|
||||
enlever le préfixe $1 le plus long à $2..*
|
||||
~~~
|
||||
## `stradds`
|
||||
~~~
|
||||
ajouter le suffixe $1 à $2*
|
||||
ajouter le suffixe $1 à $2..*
|
||||
~~~
|
||||
## `strdels`
|
||||
~~~
|
||||
enlever le suffixe $1 à $2*
|
||||
enlever le suffixe $1 à $2..*
|
||||
~~~
|
||||
## `strdels2`
|
||||
~~~
|
||||
enlever le suffixe le plus long $1 à $2*
|
||||
enlever le suffixe le plus long $1 à $2..*
|
||||
~~~
|
||||
## `strlower`
|
||||
~~~
|
||||
|
@ -52,14 +52,14 @@ majuscule
|
|||
~~~
|
||||
## `strmid`
|
||||
~~~
|
||||
Afficher la plage $1 de la valeur $2*. La plage peut être d'une des formes
|
||||
Afficher la plage $1 de la valeur $2..*. La plage peut être d'une des formes
|
||||
'start', '[start]:length'. Si start est négatif, le compte est effectué à
|
||||
partir de la fin de la chaine. Si length est négatif, il est rajouté à la
|
||||
longueur de la chaine à partir de start
|
||||
~~~
|
||||
## `strrepl`
|
||||
~~~
|
||||
Remplacer dans la valeur $3* le motif $1 par la chaine $2. $1 peut commencer
|
||||
Remplacer dans la valeur $3..* le motif $1 par la chaine $2. $1 peut commencer
|
||||
par l'un des caractères /, #, % pour indiquer le type de recherche
|
||||
~~~
|
||||
## `strops`
|
||||
|
@ -122,5 +122,46 @@ Tester si la chaine $1 commence par le wildcard $2
|
|||
~~~
|
||||
Tester si la chaine $1 se termine par le wildcard $2
|
||||
~~~
|
||||
## `strsplitf`
|
||||
~~~
|
||||
Cette fonction doit être appelée avec N arguments (avec N>1). Elle analyse et
|
||||
découpe l'argument $N comme avec une ligne de commande du shell. Ensuite, elle
|
||||
appelle la fonction $1 avec les arguments de $2 à ${N-1}, suivi des arguments
|
||||
obtenus lors de l'analyse de l'argument $N. Par exemple, la commande suivante:
|
||||
strsplitf cmd arg1 "long arg2" "arg3 'long arg4'"
|
||||
est équivalente à:
|
||||
cmd arg1 "long arg2" arg3 "long arg4"
|
||||
Retourner le code 127 si la fonction à appeler n'est pas spécifiée. Retourner
|
||||
le code 126 si une erreur s'est produite lors de l'analyse de l'argument $N
|
||||
~~~
|
||||
## `strecho`
|
||||
## `strqvals`
|
||||
~~~
|
||||
Afficher chaque argument à part avec des quotes. A chainer avec strsplitf()
|
||||
~~~
|
||||
## `strqlines`
|
||||
~~~
|
||||
Afficher chaque ligne des fichiers spécifiés comme un argument. A chainer avec
|
||||
strsplitf()
|
||||
~~~
|
||||
## `strqarray`
|
||||
~~~
|
||||
Afficher chaque valeur des tableaux $@ comme un argument. A chainer avec
|
||||
strsplitf()
|
||||
~~~
|
||||
## `evals`
|
||||
~~~
|
||||
Enchainer des traitements sur des chaines de caractères, comme pour la fonction
|
||||
evalx(). Il y a cependant quelques différences:
|
||||
- Seules certains fonctions spécifiques peuvent être utilisées: elles sont
|
||||
reconnaissables à leur préfixe 'str'. En effet, lors de l'utilisation d'une
|
||||
commande par evals(), le préfixe 'str' est systématiquement ajouté.
|
||||
- La fonction strsplitf() est traitée de façon particulière pour lancer une
|
||||
commande avec le préfixe 'str'
|
||||
Ainsi, la commande suivante:
|
||||
evals cmd1 // splitf cmd2
|
||||
est équivalente à la commande:
|
||||
strplitf strcmd2 "$(strcmd1)"
|
||||
~~~
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -13,9 +13,9 @@ Retourner 0 si une modification a été faite dans le fichier, 1 sinon
|
|||
~~~
|
||||
## `conf_enableq`
|
||||
~~~
|
||||
Comme conf_enable(), mais s'assure que les valeurs sont quotées dans le
|
||||
fichier. Ceci permet de stocker des valeurs avec des espaces ou des
|
||||
caractères spéciaux.
|
||||
Comme conf_enable(), mais s'assure que les valeurs sont quotées si
|
||||
nécessaire dans le fichier. Ceci permet de stocker des valeurs avec des
|
||||
espaces ou des caractères spéciaux.
|
||||
~~~
|
||||
## `conf_disable`
|
||||
~~~
|
||||
|
|
|
@ -38,60 +38,6 @@ démarrage
|
|||
~~~
|
||||
Activer le service $1 pour qu'il se lance automatiquement au démarrage
|
||||
~~~
|
||||
## `network_parse_confbr`
|
||||
~~~
|
||||
network_parse_confbr "$confbr" br ifaces
|
||||
~~~
|
||||
## `network_format_confbr`
|
||||
~~~
|
||||
network_format_confbr "$br" ifaces --> "br:ifaces"
|
||||
~~~
|
||||
## `network_parse_confip`
|
||||
~~~
|
||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||
~~~
|
||||
## `network_parse_ipsuffix`
|
||||
~~~
|
||||
network_parse_ipsuffix "$ipsuffix" ip suffix
|
||||
~~~
|
||||
## `network_format_confip`
|
||||
~~~
|
||||
network_format_confip "$iface" "$gateway" ipsuffixes --> "iface//gateway:ipsuffixes"
|
||||
~~~
|
||||
## `network_format_ipsuffix`
|
||||
~~~
|
||||
network_format_ipsuffix "$ip" "$suffix" --> "ip/suffix"
|
||||
~~~
|
||||
## `network_fix_confbrs`
|
||||
~~~
|
||||
normaliser le tableau $1(=confbrs): fusionner les doublons
|
||||
~~~
|
||||
## `network_fix_confips`
|
||||
~~~
|
||||
normaliser le tableau $1(=confips): fusionner les doublons, spécifier le
|
||||
suffixe /24 par défaut, etc. $2 est le cas échéant l'interface associée
|
||||
aux adresses ip non qualifiées
|
||||
~~~
|
||||
## `network_fix_mainiface`
|
||||
~~~
|
||||
A partir des valeurs des tableaux $1(=confbrs) et $2(=confips), et de
|
||||
l'interface principale $3, déterminer l'interface principale. Si $3 est
|
||||
spécifié, c'est la valeur sélectionnée. Sinon, si un bridge existe, c'est
|
||||
le premier bridge qui est sélectionné. Sinon, la première interface est
|
||||
sélectionnée. Sinon, on prend eth0.
|
||||
Ensuite, réorganiser les tableaux de façon que confips[0] devienne la
|
||||
configuration ip de l'interface principale.
|
||||
~~~
|
||||
## `network_fix_confs`
|
||||
## `network_set_confbrs`
|
||||
~~~
|
||||
initialiser $1(=confbrs) avec l'état des bridges sur le système courant
|
||||
~~~
|
||||
## `network_set_confips`
|
||||
~~~
|
||||
initialiser le tableau $1(=confips) avec l'état des interfaces sur le
|
||||
système courant
|
||||
~~~
|
||||
## `network_interfaces_check_confbr`
|
||||
~~~
|
||||
Vérifier que la configuration du bridge $1, dont les membres sont les
|
||||
|
@ -135,9 +81,6 @@ $3(=confips)
|
|||
~~~
|
||||
## `network_fix_hostname`
|
||||
## `network_fix_mailname`
|
||||
## `network_fix_exim4`
|
||||
## `network_fix_postfix`
|
||||
## `network_fix_hosts`
|
||||
## `network_config`
|
||||
~~~
|
||||
(Re)configurer le réseau sur l'hôte courant. Des efforts sont faits pour
|
||||
|
|
|
@ -73,5 +73,62 @@ Si $1 *semble* déjà être un nom d'hôte pleinement qualifié, l'afficher tel
|
|||
quel. Sinon utiliser ipcalc_fqdn() pour afficher le nom d'hôte pleinement
|
||||
qualifié correspondant.
|
||||
~~~
|
||||
## `network_parse_confbr`
|
||||
~~~
|
||||
network_parse_confbr "$confbr" br ifaces
|
||||
~~~
|
||||
## `network_format_confbr`
|
||||
~~~
|
||||
network_format_confbr "$br" ifaces --> "br:ifaces"
|
||||
~~~
|
||||
## `network_parse_confip`
|
||||
~~~
|
||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||
~~~
|
||||
## `network_parse_ipsuffix`
|
||||
~~~
|
||||
network_parse_ipsuffix "$ipsuffix" ip suffix
|
||||
~~~
|
||||
## `network_format_confip`
|
||||
~~~
|
||||
network_format_confip "$iface" "$gateway" ipsuffixes --> "iface//gateway:ipsuffixes"
|
||||
~~~
|
||||
## `network_format_ipsuffix`
|
||||
~~~
|
||||
network_format_ipsuffix "$ip" "$suffix" --> "ip/suffix"
|
||||
~~~
|
||||
## `network_fix_confbrs`
|
||||
~~~
|
||||
normaliser le tableau $1(=confbrs): fusionner les doublons
|
||||
~~~
|
||||
## `network_fix_confips`
|
||||
~~~
|
||||
normaliser le tableau $1(=confips): fusionner les doublons, spécifier le
|
||||
suffixe /24 par défaut, etc. $2 est le cas échéant l'interface associée
|
||||
aux adresses ip non qualifiées
|
||||
~~~
|
||||
## `network_fix_mainiface`
|
||||
~~~
|
||||
A partir des valeurs des tableaux $1(=confbrs) et $2(=confips), et de
|
||||
l'interface principale $3, déterminer l'interface principale. Si $3 est
|
||||
spécifié, c'est la valeur sélectionnée. Sinon, si un bridge existe, c'est
|
||||
le premier bridge qui est sélectionné. Sinon, la première interface est
|
||||
sélectionnée. Sinon, on prend eth0.
|
||||
Ensuite, réorganiser les tableaux de façon que confips[0] devienne la
|
||||
configuration ip de l'interface principale.
|
||||
~~~
|
||||
## `network_fix_confs`
|
||||
## `network_set_confbrs`
|
||||
~~~
|
||||
initialiser $1(=confbrs) avec l'état des bridges sur le système courant
|
||||
~~~
|
||||
## `network_set_confips`
|
||||
~~~
|
||||
initialiser le tableau $1(=confips) avec l'état des interfaces sur le
|
||||
système courant
|
||||
~~~
|
||||
## `network_fix_exim4`
|
||||
## `network_fix_postfix`
|
||||
## `network_fix_hosts`
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -32,9 +32,6 @@ démarrage
|
|||
~~~
|
||||
Activer le service $1 pour qu'il se lance automatiquement au démarrage
|
||||
~~~
|
||||
## `create_bridge`
|
||||
~~~
|
||||
Créer un nouveau pont nommé $1 avec les paramètres $2
|
||||
~~~
|
||||
## `network_fix_hostname`
|
||||
|
||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
|
@ -11,6 +11,11 @@ et $3(=SYSVER) en fonction des valeurs des autres. Cette fonction est à
|
|||
utiliser quand on récupère cette information de la part de l'utilisateur,
|
||||
et qu'il faut compléter
|
||||
~~~
|
||||
## `dump_sysinfos`
|
||||
~~~
|
||||
Afficher les valeurs de SYSNAME, SYSDIST, SYSVER qui décrivent le système
|
||||
actuel
|
||||
~~~
|
||||
## `get_sysinfos_desc`
|
||||
~~~
|
||||
Afficher une chaine de la forme SYSNAME/SYSDIST/SYSVER qui décrit le
|
||||
|
@ -46,6 +51,16 @@ cela n'a actuellement de sens qu'avec les version de MacOS X. Il faut
|
|||
aussi impérativement filtrer sur le système, e.g:
|
||||
check_sysinfos -s macosx -d 10.5+
|
||||
~~~
|
||||
## `unsupported_system`
|
||||
~~~
|
||||
Afficher un message d'erreur indiquant que le système actuel n'est pas
|
||||
supporté, et quitter le script
|
||||
~~~
|
||||
## `require_sysinfos`
|
||||
~~~
|
||||
Vérifier le système actuel avec check_sysinfos(), et afficher un message
|
||||
d'erreur avec unsupported_system() s'il ne correspond pas à la requête
|
||||
~~~
|
||||
## `on_debian`
|
||||
~~~
|
||||
Tester si on est sur debian. charger le module debian si c'est le cas.
|
||||
|
|
|
@ -224,7 +224,7 @@ found_element && $0 ~ /<\/element/ {
|
|||
|
||||
local instance notfirst=
|
||||
for instance in "$@"; do
|
||||
script="$script${notfirst:+|| }name == \"$(quote_awk "$instance")\""
|
||||
script="$script${notfirst:+|| }name == $(qawk "$instance")"
|
||||
notfirst=1
|
||||
done
|
||||
script="$script"') {
|
||||
|
@ -304,7 +304,7 @@ found_element && $0 ~ /<\/element/ {
|
|||
|
||||
local instance notfirst=
|
||||
for instance in "$@"; do
|
||||
script="$script${notfirst:+|| }name == \"$(quote_awk "$instance")\""
|
||||
script="$script${notfirst:+|| }name == $(qawk "$instance")"
|
||||
notfirst=1
|
||||
done
|
||||
script="$script"') {
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
||||
# Emplacement où se trouve le dépôt source pour deploy
|
||||
#DEPLOY_SRCDIR=~/wop/deploy
|
|
@ -19,7 +19,42 @@ OPTIONS
|
|||
-f, --overwrite
|
||||
Ecraser le fichier s'il existe déjà
|
||||
-E, --encoding ENCODING
|
||||
Spécifier l'encoding à utiliser pour la génération du fichier"
|
||||
Spécifier l'encoding à utiliser pour la génération du fichier
|
||||
--doctype DOCTYPE
|
||||
-4, --html4
|
||||
-5, --html5
|
||||
Spécifier le type de document. Les options -4 et -5 sont équivalentes à
|
||||
--doctype html4 et --doctype html5, respectivement.
|
||||
-b, --baseurl BASEURL
|
||||
Spécifier le chemin à partir de la racine qui contient les resources
|
||||
blueprint et bootstrap
|
||||
-B, --bspath, --bppath CLPATH
|
||||
Spécifier le chemin sous BASEURL à partir duquel charger bootstrap ou
|
||||
blueprint. La valeur par défaut est 'bootstrap' pour l'option --bs,
|
||||
'blueprint' pour l'option --bp
|
||||
-s, --bs, --bootstrap
|
||||
Activer le support de bootstrap. L'option --bs est automatiquement
|
||||
activée si l'option --bspath n'est pas utilisée et le répertoire
|
||||
[BASEURL/]bootstrap/ existe
|
||||
-p, --bp, --blueprint
|
||||
Activer le support de blueprint. L'option --bp est automatiquement
|
||||
activée si l'option --bppath n'est pas utilisée et le répertoire
|
||||
[BASEURL/]blueprint/ existe
|
||||
-n, --nobs, --no-bootstrap, --nobp, --no-blueprint
|
||||
Désactiver le support de bootstrap et blueprint
|
||||
-j, --jquery
|
||||
-k, --no-jquery
|
||||
Activer (resp. désactiver) le chargement de jQuery à partir de BASEURL
|
||||
pour les pages nues et avec blueprint. Avec bootstrap, le chargement de
|
||||
jQuery est toujours effectué et cette option est ignorée.
|
||||
--hl, --titlehl TITLEHL
|
||||
Spécifier le tag à utiliser pour le titre. Vaut par défaut 'h1' pour les
|
||||
templates HTML et PHP, 'h2' pour les templates overview et package
|
||||
-T, --title TITLE
|
||||
Spécifier le titre du document.
|
||||
--head-title HTITLE
|
||||
Spécifier le titre pour le tag <title> dans la section <head>. La valeur
|
||||
par défaut est celle de l'option --title."
|
||||
}
|
||||
|
||||
NAME=www
|
||||
|
@ -74,28 +109,114 @@ function __generate_html() {
|
|||
|
||||
local dir="$(dirname "$file")"
|
||||
local nobpsuppl nobplocal nobpmobile
|
||||
if [ "$blueprint" == auto ]; then
|
||||
if [ -d "$dir/blueprint" ]; then
|
||||
blueprint=1
|
||||
[ -f "$dir/bpsuppl.css" ] || nobpsuppl=1
|
||||
[ -f "$dir/bplocal.css" ] || nobplocal=1
|
||||
[ -f "$dir/bpmobile.css" ] || nobpmobile=1
|
||||
if [ "$csslib" == auto ]; then
|
||||
if [ -n "$clpath" ]; then
|
||||
if [ "$clpath" == bootstrap -o -z "${clpath##*/bootstrap}" ]; then
|
||||
csslib=bootstrap
|
||||
elif [ "$clpath" == blueprint -o -z "${clpath##*/blueprint}" ]; then
|
||||
csslib=blueprint
|
||||
else
|
||||
csslib=
|
||||
fi
|
||||
elif [ -d "$dir/${baseurl#/}bootstrap" ]; then
|
||||
csslib=bootstrap
|
||||
elif [ -d "$dir/${baseurl#/}blueprint" ]; then
|
||||
csslib=blueprint
|
||||
else
|
||||
blueprint=
|
||||
csslib=
|
||||
fi
|
||||
fi
|
||||
if [ "$csslib" == bootstrap ]; then
|
||||
[ -n "$clpath" ] || clpath=bootstrap
|
||||
elif [ "$csslib" == blueprint ]; then
|
||||
[ -n "$clpath" ] || clpath=blueprint
|
||||
[ -f "$dir/${baseurl#/}bpsuppl.css" ] || nobpsuppl=1
|
||||
[ -f "$dir/${baseurl#/}bplocal.css" ] || nobplocal=1
|
||||
[ -f "$dir/${baseurl#/}bpmobile.css" ] || nobpmobile=1
|
||||
fi
|
||||
|
||||
clpath="$baseurl$clpath"
|
||||
[ "${clpath:$((-1)):1}" == / ] || clpath="$clpath/"
|
||||
|
||||
local jquerymin
|
||||
if [ "$jquery" == auto ]; then
|
||||
if [ -f "$dir/jquery.min.js" ]; then
|
||||
if [ "$csslib" == bootstrap ]; then
|
||||
jquery=
|
||||
elif [ -f "$dir/${baseurl#/}jquery.min.js" ]; then
|
||||
jquery=1
|
||||
jquerymin=1
|
||||
elif [ -d "$dir/jquery.js" ]; then
|
||||
elif [ -f "$dir/${baseurl#/}jquery.js" ]; then
|
||||
jquery=1
|
||||
else
|
||||
jquery=
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$doctype" == auto ]; then
|
||||
if [ "$csslib" == bootstrap ]; then
|
||||
doctype=html5
|
||||
else
|
||||
doctype=html4
|
||||
fi
|
||||
fi
|
||||
head='<head>'
|
||||
if [ "$doctype" == html5 ]; then
|
||||
head="$head
|
||||
"'<meta charset="'"$encoding"'" />'
|
||||
else
|
||||
head="$head
|
||||
"'<meta http-equiv="Content-Type" content="text/html; charset='"$encoding"'" />'
|
||||
fi
|
||||
|
||||
if [ "$csslib" == bootstrap ]; then
|
||||
head="$head
|
||||
"'<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="shortcut" href="'"$clpath"'favicon.ico" />
|
||||
<link rel="icon apple-touch-icon" href="'"$clpath"'icon.png" />'
|
||||
csslib='<link href="'"$clpath"'bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
|
||||
<script src="'"$clpath"'jquery.min.js" type="text/javascript"></script>
|
||||
<script src="'"$clpath"'bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="'"$clpath"'html5shiv/html5shiv.js"></script>
|
||||
<script src="'"$clpath"'respond/respond.min.js"></script>
|
||||
<![endif]-->'
|
||||
startcl='<div class="container">'
|
||||
endcl='</div>'
|
||||
elif [ "$csslib" == blueprint ]; then
|
||||
head="$head
|
||||
"'<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="shortcut" href="'"$baseurl"'favicon.ico" />
|
||||
<link rel="icon apple-touch-icon" href="'"$baseurl"'icon.png" />'
|
||||
csslib='<link rel="stylesheet" href="'"$clpath"'screen.css" type="text/css" media="screen, projection" />
|
||||
<link rel="stylesheet" href="'"$clpath"'print.css" type="text/css" media="print" />
|
||||
<!--[if lt IE 8]>
|
||||
<link rel="stylesheet" href="'"$clpath"'ie.css" type="text/css" media="screen, projection" />
|
||||
<![endif]-->
|
||||
<'"${nobpsuppl:+!--}"'link rel="stylesheet" href="'"$baseurl"'bpsuppl.css" type="text/css" media="screen, projection" /'"${nobpsuppl:+--}"'>
|
||||
<'"${nobplocal:+!--}"'link rel="stylesheet" href="'"$baseurl"'bplocal.css" type="text/css" media="screen, projection" /'"${nobplocal:+--}"'>
|
||||
<'"${nobpmobile:+!--}"'link rel="stylesheet" href="'"$baseurl"'bpmobile.css" type="text/css" media="handheld, only screen and (max-device-width: 480px)" /'"${nobpmobile:+--}"'>'
|
||||
startcl='<div class="container">'
|
||||
endcl='</div>'
|
||||
else
|
||||
# pas de csslib ou csslib non supporté
|
||||
head="$head
|
||||
"'<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="shortcut" href="'"$baseurl"'favicon.ico" />
|
||||
<link rel="icon apple-touch-icon" href="'"$baseurl"'icon.png" />'
|
||||
csslib=
|
||||
startcl=
|
||||
endcl=
|
||||
fi
|
||||
if [ -n "$jquery" ]; then
|
||||
jquery='<script src="'"${baseurl}jquery${jquerymin:+.min}.js"'"></script>'
|
||||
fi
|
||||
start='<title>'"$head_title"'</title>
|
||||
</head>
|
||||
<body>'
|
||||
end='</body>
|
||||
</html>'
|
||||
|
||||
case "$doctype" in
|
||||
html4)
|
||||
doctype='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
|
||||
|
@ -110,27 +231,6 @@ function __generate_html() {
|
|||
html='<html>'
|
||||
;;
|
||||
esac
|
||||
head='<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset='"$encoding"'" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="shortcut" href="'"$baseurl"'favicon.ico" />
|
||||
<link rel="icon apple-touch-icon" href="'"$baseurl"'icon.png" />'
|
||||
[ -n "$blueprint" ] && blueprint='<link rel="stylesheet" href="'"$bpurl"'screen.css" type="text/css" media="screen, projection" />
|
||||
<link rel="stylesheet" href="'"$bpurl"'print.css" type="text/css" media="print" />
|
||||
<!--[if lt IE 8]>
|
||||
<link rel="stylesheet" href="'"$bpurl"'ie.css" type="text/css" media="screen, projection" />
|
||||
<![endif]-->
|
||||
<'"${nobpsuppl:+!--}"'link rel="stylesheet" href="bpsuppl.css" type="text/css" media="screen, projection" /'"${nobpsuppl:+--}"'>
|
||||
<'"${nobplocal:+!--}"'link rel="stylesheet" href="bplocal.css" type="text/css" media="screen, projection" /'"${nobplocal:+--}"'>
|
||||
<'"${nobpmobile:+!--}"'link rel="stylesheet" href="bpmobile.css" type="text/css" media="handheld, only screen and (max-device-width: 480px)" /'"${nobpmobile:+--}"'>'
|
||||
[ -n "$jquery" ] && jquery='<script src="'"${baseurl}jquery${jquerymin:+.min}.js"'"></script>'
|
||||
start='<title>'"$head_title"'</title>
|
||||
</head>
|
||||
<body>'
|
||||
startbp='<div class="container">'
|
||||
endbp='</div>'
|
||||
end='</body>
|
||||
</html>'
|
||||
}
|
||||
function __before_write_html() {
|
||||
doctype="$doctype<!-- -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding
|
||||
|
@ -142,12 +242,12 @@ function __write_html() {
|
|||
estep "$(ppath "$file")"
|
||||
echo >"$file" "$doctype$html
|
||||
$head
|
||||
${blueprint:+$blueprint
|
||||
${csslib:+$csslib
|
||||
}${jquery:+$jquery
|
||||
}$start
|
||||
${blueprint:+$startbp
|
||||
${csslib:+$startcl
|
||||
}${title:+<$titlehl>$title</$titlehl>
|
||||
}${blueprint:+$endbp
|
||||
}${csslib:+$endcl
|
||||
}$end"
|
||||
}
|
||||
|
||||
|
@ -160,9 +260,9 @@ function generate_html() {
|
|||
__update_title
|
||||
|
||||
local doctype="$doctype"
|
||||
local blueprint="$blueprint"
|
||||
local csslib="$csslib"
|
||||
local jquery="$jquery"
|
||||
local html head start startbp endbp end
|
||||
local html head start startcl endcl end
|
||||
__generate_html
|
||||
__before_write_html
|
||||
__write_html
|
||||
|
@ -184,9 +284,7 @@ function generate_javadoc_package() {
|
|||
title="Package: $title"
|
||||
|
||||
local doctype="$doctype"
|
||||
local blueprint=
|
||||
local jquery=
|
||||
local html head start startbp endbp end
|
||||
local csslib bootstrap jquery html head start startcl endcl end
|
||||
__generate_html
|
||||
__before_write_html
|
||||
__write_html
|
||||
|
@ -208,9 +306,7 @@ function generate_javadoc_overview() {
|
|||
title="Projet: $title"
|
||||
|
||||
local doctype="$doctype"
|
||||
local blueprint=
|
||||
local jquery=
|
||||
local html head start startbp endbp end
|
||||
local csslib bootstrap jquery html head start startcl endcl end
|
||||
__generate_html
|
||||
__before_write_html
|
||||
__write_html
|
||||
|
@ -228,9 +324,9 @@ function generate_php() {
|
|||
__update_title
|
||||
|
||||
local doctype="$doctype"
|
||||
local blueprint="$blueprint"
|
||||
local csslib="$csslib"
|
||||
local jquery="$jquery"
|
||||
local html head start startbp endbp end
|
||||
local html head start startcl endcl end
|
||||
__generate_html
|
||||
doctype="<?php # -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=2:sts=2:et:ai:si:sta:fenc=$encoding
|
||||
?>${doctype:+$doctype
|
||||
|
@ -283,12 +379,11 @@ template=
|
|||
edit=1
|
||||
overwrite=
|
||||
encoding=
|
||||
#executable=
|
||||
doctype=auto
|
||||
baseurl=/
|
||||
doctype=html4
|
||||
blueprint=auto
|
||||
clpath=
|
||||
csslib=auto
|
||||
jquery=auto
|
||||
bpurl=
|
||||
titlehl=
|
||||
title=
|
||||
head_title=
|
||||
|
@ -302,24 +397,20 @@ parse_opts "${PRETTYOPTS[@]}" \
|
|||
--doctype: doctype= \
|
||||
-4,--html4 doctype=html4 \
|
||||
-5,--html5 doctype=html5 \
|
||||
-U:,--baseurl: baseurl= \
|
||||
-b,--blueprint,--bp blueprint=1 \
|
||||
-n,--no-blueprint,--noblueprint,--nobp blueprint= \
|
||||
-b:,--baseurl: baseurl= \
|
||||
-B:,--bspath:,--bppath: clpath= \
|
||||
-s,--bootstrap,--bs csslib=bootstrap \
|
||||
-p,--blueprint,--bp csslib=blueprint \
|
||||
-n,--no-bootstrap,--nobootstrap,--nobs,--no-blueprint,--noblueprint,--nobp csslib= \
|
||||
-j,--jquery jquery=1 \
|
||||
-k,--no-jquery,--nojquery jquery= \
|
||||
-B:,--bpurl: bpurl= \
|
||||
--titlehl:,--hl: titlehl= \
|
||||
-T:,--title: title= \
|
||||
--head-title: head_title= \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
# à rajouter ci-dessus si les fichiers peuvent être exécutables:
|
||||
#-x,--executable executable=1 \
|
||||
#-n,--no-executable executable= \
|
||||
|
||||
[ -n "$encoding" ] || encoding=utf-8
|
||||
[ -z "$baseurl" -o "${baseurl:$((-1)):1}" == / ] || baseurl="$baseurl/"
|
||||
[ -n "$bpurl" ] || bpurl="${baseurl}blueprint/"
|
||||
[ "${bpurl:$((-1)):1}" == / ] || bpurl="$bpurl/"
|
||||
|
||||
files2edit=()
|
||||
r=0
|
||||
|
|
|
@ -63,8 +63,8 @@ fi
|
|||
|
||||
# identification du système
|
||||
echo "##@before *" >lib/profile.d/0nutools
|
||||
set_var_cmd UNAME_SYSTEM "$UNAME_SYSTEM" >>lib/profile.d/0nutools
|
||||
set_var_cmd UNAME_MACHINE "$UNAME_MACHINE" >>lib/profile.d/0nutools
|
||||
echo_setv UNAME_SYSTEM "$UNAME_SYSTEM" >>lib/profile.d/0nutools
|
||||
echo_setv UNAME_MACHINE "$UNAME_MACHINE" >>lib/profile.d/0nutools
|
||||
|
||||
# installer les profils
|
||||
destdir="@@dest@@"
|
||||
|
|
|
@ -1 +1 @@
|
|||
014001000
|
||||
014002000
|
||||
|
|
|
@ -8,8 +8,8 @@ uprovide apache.tools
|
|||
urequire base sysinfos template apache
|
||||
|
||||
function __apache_rc_destdir() {
|
||||
[ -z "$3" ] && set_var "${1:-certsdir}" "$(get_APACHESSLCERTSDIR_prefix)"
|
||||
[ -z "$4" ] && set_var "${2:-keysdir}" "$(get_APACHESSLKEYSDIR_prefix)"
|
||||
[ -z "$3" ] && setv "${1:-certsdir}" "$(get_APACHESSLCERTSDIR_prefix)"
|
||||
[ -z "$4" ] && setv "${2:-keysdir}" "$(get_APACHESSLKEYSDIR_prefix)"
|
||||
}
|
||||
|
||||
function __apache_rc_loadconf() {
|
||||
|
@ -134,9 +134,9 @@ function apache_resolvecert() {
|
|||
__apache_rc_loadconf
|
||||
__apache_rc_resolveprefix "$__certsdir" "$__keysdir"
|
||||
__apache_rc_checkvars "$__certsdir" "$__keysdir" || return 1
|
||||
set_var "${3:-cert}" "$__rc_cert"
|
||||
set_var "${4:-key}" "$__rc_key"
|
||||
set_var "${5:-ca}" "$__rc_ca"
|
||||
setv "${3:-cert}" "$__rc_cert"
|
||||
setv "${4:-key}" "$__rc_key"
|
||||
setv "${5:-ca}" "$__rc_ca"
|
||||
}
|
||||
|
||||
function apache_addcert() {
|
||||
|
|
234
lib/ulib/base
234
lib/ulib/base
|
@ -40,101 +40,12 @@ fi
|
|||
##@include base.args
|
||||
##@include base.tools
|
||||
##@include base.compat
|
||||
##@include base.deprecated
|
||||
uprovide base
|
||||
urequire base.init base.core base.string base.num base.bool base.array base.quote base.split base.args base.tools base.compat
|
||||
|
||||
## Informations sur l'hôte sur lequel tourne ce script
|
||||
# Type de système
|
||||
UNAME_SYSTEM=`uname -s`
|
||||
[ "${UNAME_SYSTEM#CYGWIN}" != "$UNAME_SYSTEM" ] && UNAME_SYSTEM=Cygwin
|
||||
[ "${UNAME_SYSTEM#MINGW32}" != "$UNAME_SYSTEM" ] && UNAME_SYSTEM=Mingw
|
||||
UNAME_MACHINE=`uname -m`
|
||||
if [ -n "$UTOOLS_CHROOT" ]; then
|
||||
# Dans un chroot, il est possible de forcer les valeurs
|
||||
[ -n "$UTOOLS_UNAME_SYSTEM" ] && eval "UNAME_SYSTEM=$UTOOLS_UNAME_SYSTEM"
|
||||
[ -n "$UTOOLS_UNAME_MACHINE" ] && eval "UNAME_MACHINE=$UTOOLS_UNAME_MACHINE"
|
||||
fi
|
||||
|
||||
## valeurs
|
||||
function setyesval() {
|
||||
# mettre la valeur normalisée de la valeur "oui" de $2 dans la variable $1
|
||||
is_yes "$2" && set_var "$1" 1 || set_var "$1" ""
|
||||
}
|
||||
function normyesval() {
|
||||
# remplacer la valeur de la variable $1 par la valeur normalisée de sa valeur "oui"
|
||||
# Si $2 est non vide, prendre cette valeur plutôt que la valeur de la variable $1
|
||||
is_yes "${2:-"${!1}"}" && set_var "$1" 1 || set_var "$1" ""
|
||||
}
|
||||
function normyesvals() {
|
||||
# remplacer les valeur des variables $1..* par les valeurs normalisées
|
||||
# respectives de leur valeur "oui"
|
||||
local __nyv_yesvar
|
||||
for __nyv_yesvar in "$@"; do
|
||||
is_yes "${!__nyv_yesvar}" && set_var "$__nyv_yesvar" 1 || set_var "$__nyv_yesvar" ""
|
||||
done
|
||||
}
|
||||
function quote_in() {
|
||||
# Comme quote_arg pour une chaine lue sur stdin
|
||||
sed 's/\\/\\\\/g
|
||||
s/"/\\"/g
|
||||
s/\$/\\$/g
|
||||
s/`/\\`/g'
|
||||
}
|
||||
function quote_sin() {
|
||||
# Pour la chaine lue sur stdin, remplacer ' par '\''. Cela permet de protéger une
|
||||
# chaine à mettre entre quotes
|
||||
sed "s/'/'\\\\''/g"
|
||||
}
|
||||
function quote_sarg() {
|
||||
# Dans la chaine $1, remplacer ' par '\''. Cette fonction utilise quote_sin,
|
||||
# puisque le shell a des difficultés à faire le rechercher/remplacer approprié
|
||||
quote_sin <<<"$1"
|
||||
}
|
||||
function quoted_sarg() {
|
||||
# Dans la chaine $1, remplacer ' par '\'', et afficher la chaine entourée de
|
||||
# quotes
|
||||
echo "'$(quote_sarg "$1")'"
|
||||
}
|
||||
function quoted_sargs() {
|
||||
# Comme quoted_sarg, mais tous les arguments sont quotés et affichés entourés de
|
||||
# quotes, ce qui permet de construire des arguments d'une ligne de commande
|
||||
local a s
|
||||
for a in "$@"; do
|
||||
s="${s:+$s }$(quoted_sarg "$a")"
|
||||
done
|
||||
rawecho "$s"
|
||||
}
|
||||
urequire base.deprecated
|
||||
|
||||
## variables tableaux
|
||||
function set_array_cmd() {
|
||||
# Afficher la commande permettant d'initialiser le tableau $1 avec les valeurs:
|
||||
# soit du tableau $2, soit de $3..$n si $2=="@"
|
||||
# S'il n'y a que l'argument $1, alors afficher la commande permettant de
|
||||
# recréer le tableau $1
|
||||
[ $# -eq 1 ] && set -- "$1" "$1"
|
||||
local __sac_s __sac_v __sac_f
|
||||
__sac_s="$1=("; shift
|
||||
if [ "$1" == "@" ]; then
|
||||
shift
|
||||
else
|
||||
eval "set -- \"\${$1[@]}\""
|
||||
fi
|
||||
__sac_f=1
|
||||
for __sac_v in "$@"; do
|
||||
[ -n "$__sac_f" ] && __sac_f= || __sac_s="$__sac_s "
|
||||
__sac_s="$__sac_s$(quoted_arg "$__sac_v")"
|
||||
done
|
||||
__sac_s="$__sac_s)"
|
||||
echo "$__sac_s"
|
||||
}
|
||||
function set_array() {
|
||||
# Soit $1 un tableau à créer. Si $2=="@", créer le tableau $1 avec les valeurs
|
||||
# $3..$n. Sinon, créer le tableau $1 avec les valeurs du tableau $2.
|
||||
# Cette fonction n'existe que comme un pendant de set_var(), mais le véritable
|
||||
# intérêt est la fonction set_array_cmd(). cf array_copy() pour une version plus
|
||||
# efficace de la copie de tableaux
|
||||
eval "$(set_array_cmd "$@")"
|
||||
}
|
||||
function array_count() {
|
||||
# retourner le nombre d'éléments du tableau $1
|
||||
eval "echo \${#$1[*]}"
|
||||
|
@ -151,20 +62,20 @@ function array_add() {
|
|||
# ajouter les valeurs $2..@ au tableau dont le nom est $1
|
||||
local __aa_a="$1"; shift
|
||||
eval "$__aa_a=(\"\${$__aa_a[@]}\" \"\$@\")"
|
||||
#eval "$1=(\"\${$1[@]}\" \"$(quote_arg "$2")\")"
|
||||
#eval "$1=(\"\${$1[@]}\" $(qval "$2"))"
|
||||
}
|
||||
function array_ins() {
|
||||
# insérer les valeurs $2..@ au début du tableau dont le nom est $1
|
||||
local __aa_a="$1"; shift
|
||||
eval "$__aa_a=(\"\$@\" \"\${$__aa_a[@]}\")"
|
||||
#eval "$1=(\"$(quote_arg "$2")\" \"\${$1[@]}\")"
|
||||
#eval "$1=($(qval "$2") \"\${$1[@]}\")"
|
||||
}
|
||||
function array_del() {
|
||||
# supprimer *les* valeurs $2 du tableau dont le nom est $1
|
||||
local __ad_v
|
||||
local -a __ad_vs
|
||||
eval 'for __ad_v in "${'"$1"'[@]}"; do
|
||||
if [ "$__ad_v" != '"$(quoted_arg "$2")"' ]; then
|
||||
if [ "$__ad_v" != '"$(qval "$2")"' ]; then
|
||||
array_add __ad_vs "$__ad_v"
|
||||
fi
|
||||
done'
|
||||
|
@ -175,7 +86,7 @@ function array_addu() {
|
|||
# déjà. Retourner vrai si la valeur a été ajoutée
|
||||
local __as_v
|
||||
eval 'for __as_v in "${'"$1"'[@]}"; do
|
||||
if [ "$__as_v" == '"$(quoted_arg "$2")"' ]; then
|
||||
if [ "$__as_v" == '"$(qval "$2")"' ]; then
|
||||
return 1
|
||||
fi
|
||||
done'
|
||||
|
@ -190,7 +101,7 @@ function array_insu() {
|
|||
# valeur n'y est pas déjà. Retourner vrai si la valeur a été ajoutée.
|
||||
local __as_v
|
||||
eval 'for __as_v in "${'"$1"'[@]}"; do
|
||||
if [ "$__as_v" == '"$(quoted_arg "$2")"' ]; then
|
||||
if [ "$__as_v" == '"$(qval "$2")"' ]; then
|
||||
return 1
|
||||
fi
|
||||
done'
|
||||
|
@ -224,7 +135,7 @@ function array_contains() {
|
|||
# tester si le tableau dont le nom est $1 contient la valeur $2
|
||||
local __ac_v
|
||||
eval 'for __ac_v in "${'"$1"'[@]}"; do
|
||||
if [ "$__ac_v" == '"$(quoted_arg "$2")"' ]; then
|
||||
if [ "$__ac_v" == '"$(qvalm "$2")"' ]; then
|
||||
return 0
|
||||
fi
|
||||
done'
|
||||
|
@ -235,7 +146,7 @@ function array_icontains() {
|
|||
# compte de la casse
|
||||
local __ac_v
|
||||
eval 'for __ac_v in "${'"$1"'[@]}"; do
|
||||
if [ "$(strlower "$__ac_v")" == '"$(strlower "$(quoted_arg "$2")")"' ]; then
|
||||
if [ "$(strlower "$__ac_v")" == '"$(strlower "$(qval "$2")")"' ]; then
|
||||
return 0
|
||||
fi
|
||||
done'
|
||||
|
@ -247,7 +158,7 @@ function array_find() {
|
|||
local __af_i __af_v
|
||||
__af_i=0
|
||||
eval 'for __af_v in "${'"$1"'[@]}"; do
|
||||
if [ "$__af_v" == '"$(quoted_arg "$2")"' ]; then
|
||||
if [ "$__af_v" == '"$(qval "$2")"' ]; then
|
||||
if [ -n "$3" ]; then
|
||||
echo "${'"$3"'[$__af_i]}"
|
||||
else
|
||||
|
@ -313,11 +224,11 @@ function array_map() {
|
|||
}
|
||||
function first_value() {
|
||||
# retourner la première valeur du tableau $1
|
||||
eval "rawecho \"\${$1[@]:0:1}\""
|
||||
eval "recho \"\${$1[@]:0:1}\""
|
||||
}
|
||||
function last_value() {
|
||||
# retourner la dernière valeur du tableau $1
|
||||
eval "rawecho \"\${$1[@]:\$((-1)):1}\""
|
||||
eval "recho \"\${$1[@]:\$((-1)):1}\""
|
||||
}
|
||||
function array_copy() {
|
||||
# copier le contenu du tableau $2 dans le tableau $1
|
||||
|
@ -418,9 +329,9 @@ function array_join() {
|
|||
__aj_j="${__aj_j:+$__aj_j'"$__aj_s"'}$__aj_pf$__aj_l$__aj_sf"
|
||||
done'
|
||||
if [ -n "$__aj_j" ]; then
|
||||
rawecho "$__aj_j"
|
||||
recho "$__aj_j"
|
||||
elif [ "$__aj_an" != "\$@" -a -n "$3" ]; then
|
||||
rawecho "$3"
|
||||
recho "$3"
|
||||
fi
|
||||
}
|
||||
function array_mapjoin() {
|
||||
|
@ -482,26 +393,21 @@ function parse_date() {
|
|||
local value="$1" type="${2:-date}"
|
||||
local now="$(awk 'BEGIN { print mktime(strftime("%Y %m %d 00 00 00 +0400")) }')"
|
||||
case "$value" in
|
||||
+*)
|
||||
value="$(($now + ${value#+} * 86400))"
|
||||
;;
|
||||
*)
|
||||
value="$(<<<"$value" awk -F/ '{
|
||||
nd = strftime("%d"); nm = strftime("%m"); ny = strftime("%Y")
|
||||
d = $1 + 0; if (d < 1) d = nd;
|
||||
m = $2 + 0; if (m < 1) m = nm;
|
||||
if ($3 == "") y = ny;
|
||||
else { y = $3 + 0; if (y < 100) y = y + 2000; }
|
||||
print mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d));
|
||||
}')"
|
||||
+*) value="$(($now + ${value#+} * 86400))";;
|
||||
*) value="$(<<<"$value" awk -F/ '{
|
||||
nd = strftime("%d"); nm = strftime("%m"); ny = strftime("%Y")
|
||||
d = $1 + 0; if (d < 1) d = nd;
|
||||
m = $2 + 0; if (m < 1) m = nm;
|
||||
if ($3 == "") y = ny;
|
||||
else { y = $3 + 0; if (y < 100) y = y + 2000; }
|
||||
print mktime(sprintf("%04i %02i %02i 00 00 00 +0400", y, m, d));
|
||||
}')";;
|
||||
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";;
|
||||
m|mysql) awk '{ print strftime("%Y-%m-%d", $0 + 0) }' <<<"$value";;
|
||||
*)
|
||||
rawecho "$value"
|
||||
;;
|
||||
*) recho "$value";;
|
||||
esac
|
||||
}
|
||||
|
||||
|
@ -563,7 +469,7 @@ function normpath() {
|
|||
ap="$ap$part"
|
||||
fi
|
||||
done
|
||||
rawecho "$ap"
|
||||
recho "$ap"
|
||||
}
|
||||
function abspath() {
|
||||
# Retourner un chemin absolu vers $1. Si $2 est non nul et si $1 est un chemin
|
||||
|
@ -640,7 +546,7 @@ function ppath() {
|
|||
[ "$cwd" != "/" -a "$cwd" != "$HOME" ] && path="${path#$cwd/}"
|
||||
[ "${path#$HOME/}" != "$path" ] && path="~${path#$HOME}"
|
||||
|
||||
rawecho "$path"
|
||||
recho "$path"
|
||||
}
|
||||
function relpath() {
|
||||
# Afficher le chemin relatif de $1 par rapport à $2. Si $2 n'est pas spécifié,
|
||||
|
@ -656,7 +562,7 @@ function relpath() {
|
|||
if [ "$p" == "$cwd" ]; then
|
||||
echo ""
|
||||
elif [ "${p#$cwd/}" != "$p" ]; then
|
||||
rawecho "${p#$cwd/}"
|
||||
recho "${p#$cwd/}"
|
||||
else
|
||||
local rp
|
||||
while [ -n "$cwd" -a "${p#$cwd/}" == "$p" ]; do
|
||||
|
@ -752,8 +658,8 @@ function splitwcs() {
|
|||
fi
|
||||
done
|
||||
[ "${__sw_p#/}" != "$__sw_p" ] && __sw_d="/$__sw_d"
|
||||
set_var "$__sw_dd" "$__sw_d"
|
||||
set_var "$__sw_df" "$__sw_f"
|
||||
_setv "$__sw_dd" "$__sw_d"
|
||||
_setv "$__sw_df" "$__sw_f"
|
||||
}
|
||||
function deref() {
|
||||
# Retourner un chemin absolu vers le fichier $1, dans lequel toutes les
|
||||
|
@ -824,9 +730,9 @@ function path_if_test() {
|
|||
local basedir="$1"
|
||||
if [ $op "$basedir/$file" ]; then
|
||||
if [ -n "$rel" ]; then
|
||||
rawecho "$reldir$file"
|
||||
recho "$reldir$file"
|
||||
else
|
||||
rawecho "$basedir/$file"
|
||||
recho "$basedir/$file"
|
||||
fi
|
||||
break
|
||||
fi
|
||||
|
@ -990,15 +896,17 @@ function testdiff() {
|
|||
! quietdiff "$@"
|
||||
}
|
||||
function testupdated() {
|
||||
# test si $2 n'existe pas ou si $1 est différent de $2
|
||||
if [ -f "$2" ]; then
|
||||
testdiff "$1" "$2"
|
||||
else
|
||||
return 0
|
||||
# tester si $2 n'existe pas ou si $1 est différent de $2. Si $3 est non vide,
|
||||
# la valeur de retour est fixée à 0 (forcer à considérer le test comme vrai)
|
||||
if [ -n "$3" ]; then return 0
|
||||
elif [ -f "$2" ]; then testdiff "$1" "$2"
|
||||
else return 0
|
||||
fi
|
||||
}
|
||||
function testnewer() {
|
||||
# test si $2 n'existe pas ou si $1 est plus récent que $2
|
||||
# test si $2 n'existe pas ou si $1 est plus récent que $2. Si $3 est non vide,
|
||||
# la valeur de retour est fixée à 0 (forcer à considérer le test comme vrai)
|
||||
[ -n "$3" ] && return 0
|
||||
test ! -e "$2" -o "$1" -nt "$2"
|
||||
}
|
||||
function ps_all() {
|
||||
|
@ -1338,7 +1246,7 @@ function list_all() {
|
|||
cd "$b" 2>/dev/null || return
|
||||
eval "$(__la_cmd "$@")" | while read f; do
|
||||
[ "$f" == "." -o "$f" == ".." ] && continue
|
||||
rawecho "$f"
|
||||
recho "$f"
|
||||
done
|
||||
cd "$curdir"
|
||||
}
|
||||
|
@ -1363,7 +1271,7 @@ function list_files() {
|
|||
|
||||
cd "$b" 2>/dev/null || return
|
||||
eval "$(__la_cmd "$@")" | while read f; do
|
||||
[ -f "$f" ] && rawecho "$f"
|
||||
[ -f "$f" ] && recho "$f"
|
||||
done
|
||||
cd "$curdir"
|
||||
}
|
||||
|
@ -1379,7 +1287,7 @@ function list_dirs() {
|
|||
cd "$b" 2>/dev/null || return
|
||||
eval "$(__la_cmd "$@")" | while read f; do
|
||||
[ "$f" == "." -o "$f" == ".." ] && continue
|
||||
[ -d "$f" ] && rawecho "$f"
|
||||
[ -d "$f" ] && recho "$f"
|
||||
done
|
||||
cd "$curdir"
|
||||
}
|
||||
|
@ -1528,7 +1436,7 @@ function get_archive_basename() {
|
|||
function get_archive_appname() {
|
||||
# Obtenir le nom probable de l'application ou du framework contenu dans
|
||||
# l'archive $1, e.g:
|
||||
# get_archive_versionsuffix app-0.1.tgz
|
||||
# get_archive_appname app-0.1.tgz
|
||||
# --> app
|
||||
local appname="$(basename -- "$1")"
|
||||
# supprimer l'extension
|
||||
|
@ -1575,7 +1483,7 @@ function get_archive_versionsuffix() {
|
|||
function get_archive_version() {
|
||||
# Obtenir la valeur probable de la version de l'application ou du framework
|
||||
# contenu dans l'archive $1, e.g:
|
||||
# get_archive_versionsuffix app-0.1.tgz
|
||||
# get_archive_version app-0.1.tgz
|
||||
# --> 0.1
|
||||
local basename="$(get_archive_basename "$1")"
|
||||
echo "$basename" | awk '{
|
||||
|
@ -1631,10 +1539,10 @@ function runscript_as() {
|
|||
|
||||
local cmd
|
||||
cmd="\
|
||||
__estack=$(quoted_arg "$__estack")
|
||||
__tlevel=$(quoted_args "$__tlevel")
|
||||
__estack=$(qval "$__estack")
|
||||
__tlevel=$(qval "$__tlevel")
|
||||
export __estack __tlevel
|
||||
exec ${BASH:-/bin/sh} $(quoted_args "$@")"
|
||||
exec ${BASH:-/bin/sh} $(qvals "$@")"
|
||||
|
||||
if is_yes "$UTOOLS_USES_SU" || ! progexists sudo; then
|
||||
eecho "Entrez le mot de passe de root"
|
||||
|
@ -1818,8 +1726,8 @@ En l'occurence, ce script est accédé par le chemin $script et ce chemin doit e
|
|||
|
||||
estep "Lancement de la commande sur l'hôte distant $user@$host"
|
||||
local cmd
|
||||
[ -n "$path" ] && cmd="$(quoted_args cd "$path"); "
|
||||
cmd="$cmd$(quoted_args "$script" "$@")"
|
||||
[ -n "$path" ] && cmd="$(qvals cd "$path"); "
|
||||
cmd="$cmd$(qvals "$script" "$@")"
|
||||
ssh -qt "${UTOOLS_ENSURE_HOSTNAME_SSH_OPTS[@]}" "$user@$host" "$cmd"
|
||||
[ $? -eq 255 ] && return 12
|
||||
return 1
|
||||
|
@ -2506,15 +2414,15 @@ function awkdef() {
|
|||
__ad_value="${1:$__ad_vpos}"
|
||||
if [ -n "$__ad_int" ]; then
|
||||
# valeur entière
|
||||
echo "$__ad_name = int($(quoted_awk "$__ad_value") + 0)"
|
||||
echo "$__ad_name = int($(qawk "$__ad_value") + 0)"
|
||||
elif [ -n "$__ad_str" ]; then
|
||||
# valeur chaine
|
||||
echo "$__ad_name = $(quoted_awk "$__ad_value")"
|
||||
echo "$__ad_name = $(qawk "$__ad_value")"
|
||||
elif [ ${#__ad_value} -lt 256 ] && isnum "$__ad_value"; then
|
||||
# considérer qu'une nombre fait moins de 256 chiffres
|
||||
echo "$__ad_name = $__ad_value"
|
||||
else
|
||||
echo "$__ad_name = $(quoted_awk "$__ad_value")"
|
||||
echo "$__ad_name = $(qawk "$__ad_value")"
|
||||
fi
|
||||
else
|
||||
# fin de l'analyse des définitions de variable
|
||||
|
@ -2530,7 +2438,7 @@ function awkdef() {
|
|||
local __ad_i=1
|
||||
echo "$__ad_name[0] = 0; delete $__ad_name"
|
||||
for __ad_arg in "${!__ad_value}"; do
|
||||
echo "$__ad_name[$__ad_i]=$(quoted_awk "$__ad_arg")"
|
||||
echo "$__ad_name[$__ad_i]=$(qawk "$__ad_arg")"
|
||||
__ad_i=$(($__ad_i + 1))
|
||||
done
|
||||
eval "echo \"\${__ad_name}_count = \${#$__ad_value}\""
|
||||
|
@ -2539,7 +2447,7 @@ function awkdef() {
|
|||
done
|
||||
echo "}"
|
||||
for __ad_arg in "$@"; do
|
||||
rawecho "$__ad_arg"
|
||||
recho "$__ad_arg"
|
||||
done
|
||||
fi
|
||||
|
||||
|
@ -2967,7 +2875,7 @@ function tooenc() {
|
|||
# $3=($UTOOLS_OUTPUT_ENCODING)
|
||||
local src="$1" from="${2:-$OENC}" to="${3:-$UTOOLS_OUTPUT_ENCODING}"
|
||||
if [ "$from" == "$to" ]; then
|
||||
rawecho "$src"
|
||||
recho "$src"
|
||||
else
|
||||
iconv -f "$from" -t "$to" <<<"$src"
|
||||
fi
|
||||
|
@ -2980,9 +2888,9 @@ function tooenc_() {
|
|||
# $3=($UTOOLS_OUTPUT_ENCODING)
|
||||
local src="$1" from="${2:-$OENC}" to="${3:-$UTOOLS_OUTPUT_ENCODING}"
|
||||
if [ "$from" == "$to" ]; then
|
||||
rawecho_ "$src"
|
||||
recho_ "$src"
|
||||
else
|
||||
rawecho_ "$src" | iconv -f "$from" -t "$to"
|
||||
recho_ "$src" | iconv -f "$from" -t "$to"
|
||||
fi
|
||||
}
|
||||
function uecho_() {
|
||||
|
@ -2993,7 +2901,7 @@ function toienc() {
|
|||
# $3(=$UTOOLS_INPUT_ENCODING)
|
||||
local __tie_var="$1" __tie_to="${2:-$IENC}" __tie_from="${3:-$UTOOLS_INPUT_ENCODING}"
|
||||
if [ "$__tie_from" != "$__tie_to" ]; then
|
||||
set_var "$__tie_var" "$(iconv -f "$__tie_from" -t "$__tie_to" <<<"${!__tie_var}")"
|
||||
_setv "$__tie_var" "$(iconv -f "$__tie_from" -t "$__tie_to" <<<"${!__tie_var}")"
|
||||
fi
|
||||
}
|
||||
function uread() {
|
||||
|
@ -3075,7 +2983,7 @@ function __indent() {
|
|||
/}" != "$1" ]; then
|
||||
sed "2,\$s/^/${__tlevel}/g" <<<"$1"
|
||||
else
|
||||
rawecho "$1"
|
||||
recho "$1"
|
||||
fi
|
||||
}
|
||||
# fonctions à surcharger pour modifier la façon dont les messages sont affichés
|
||||
|
@ -3163,7 +3071,7 @@ function get_interaction_option() { :;}
|
|||
__epending=
|
||||
function eflush() {
|
||||
# Afficher les messages en attente
|
||||
if [ -n "$__epending" ]; then rawecho "$__epending" 1>&2; __epending=; fi
|
||||
if [ -n "$__epending" ]; then recho "$__epending" 1>&2; __epending=; fi
|
||||
}
|
||||
function eclearp() {
|
||||
# Supprimer les message en attente
|
||||
|
@ -3211,7 +3119,7 @@ function edebug() {
|
|||
function trace() {
|
||||
# Afficher la commande $1..@, la lancer, puis afficher son code d'erreur si une
|
||||
# erreur se produit
|
||||
local r cmd="$(quoted_args "$@")"
|
||||
local r cmd="$(qvals "$@")"
|
||||
show_info && { eflush; __eecho "\$ $cmd" 1>&2; }
|
||||
"$@"; r=$?
|
||||
if [ $r -ne 0 ]; then
|
||||
|
@ -3230,7 +3138,7 @@ function trace_error() {
|
|||
local r
|
||||
"$@"; r=$?
|
||||
if [ $r -ne 0 ]; then
|
||||
local cmd="$(quoted_args "$@")"
|
||||
local cmd="$(qvals "$@")"
|
||||
show_error && { eflush; __eecho "^ $cmd [EC #$r]" 1>&2; }
|
||||
fi
|
||||
return $r
|
||||
|
@ -3649,7 +3557,7 @@ function __rv_read() {
|
|||
OENC="$UTF8" eerror "La valeur par défaut de $__rv_v doit être non vide"
|
||||
return 1
|
||||
fi
|
||||
set_var "$__rv_v" "$__rv_d"
|
||||
_setv "$__rv_v" "$__rv_d"
|
||||
return 0
|
||||
fi
|
||||
|
||||
|
@ -3678,7 +3586,7 @@ function __rv_read() {
|
|||
fi
|
||||
__rv_r="${__rv_r:-$__rv_d}"
|
||||
if [ -n "$__rv_r" ] || ! is_yes "$__rv_re"; then
|
||||
set_var "$__rv_v" "$__rv_r"
|
||||
_setv "$__rv_v" "$__rv_r"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
@ -3755,7 +3663,7 @@ function simple_menu() {
|
|||
__sm_c=0
|
||||
fi
|
||||
done
|
||||
set_var "$__sm_option_var" "$__sm_option"
|
||||
_setv "$__sm_option_var" "$__sm_option"
|
||||
}
|
||||
|
||||
function actions_menu() {
|
||||
|
@ -3801,8 +3709,8 @@ function actions_menu() {
|
|||
|
||||
eerror_unless [ ${#__am_action_descs[*]} -gt 0 ] "Vous devez spécifier le tableau des actions" || return
|
||||
__actions_menu || return 1
|
||||
setv "${1:-action}" "$__am_select_action"
|
||||
setv "${2:-option}" "$__am_select_option"
|
||||
_setv "${1:-action}" "$__am_select_action"
|
||||
_setv "${2:-option}" "$__am_select_option"
|
||||
}
|
||||
function __actions_menu() {
|
||||
local title="$__am_title"
|
||||
|
@ -4091,12 +3999,12 @@ function ac_set_tmpfile() {
|
|||
fi
|
||||
fi
|
||||
if [ -n "$__acst_d" -a -n "$3" ]; then
|
||||
set_var "$1" "$3"
|
||||
_setv "$1" "$3"
|
||||
[ -f "$3" -a "$4" == keep ] || >"$3"
|
||||
else
|
||||
local __acst_t="$(mktempf "$2")"
|
||||
autoclean "$__acst_t"
|
||||
set_var "$1" "$__acst_t"
|
||||
_setv "$1" "$__acst_t"
|
||||
fi
|
||||
}
|
||||
function ac_set_tmpdir() {
|
||||
|
@ -4115,12 +4023,12 @@ function ac_set_tmpdir() {
|
|||
fi
|
||||
fi
|
||||
if [ -n "$__acst_d" -a -n "$3" ]; then
|
||||
set_var "$1" "$3"
|
||||
_setv "$1" "$3"
|
||||
mkdir -p "$3"
|
||||
else
|
||||
local __acst_t="$(mktempd "$2")"
|
||||
autoclean "$__acst_t"
|
||||
set_var "$1" "$__acst_t"
|
||||
_setv "$1" "$__acst_t"
|
||||
fi
|
||||
}
|
||||
function debug_tee() {
|
||||
|
|
|
@ -29,6 +29,24 @@ function yesval() {
|
|||
is_yes "$1" && echo 1
|
||||
}
|
||||
|
||||
function setyesval() {
|
||||
# mettre la valeur normalisée de la valeur "oui" de $2 dans la variable $1
|
||||
is_yes "$2" && _setv "$1" 1 || _setv "$1" ""
|
||||
}
|
||||
function normyesval() {
|
||||
# remplacer la valeur de la variable $1 par la valeur normalisée de sa valeur "oui"
|
||||
# Si $2 est non vide, prendre cette valeur plutôt que la valeur de la variable $1
|
||||
is_yes "${2:-"${!1}"}" && _setv "$1" 1 || _setv "$1" ""
|
||||
}
|
||||
function normyesvals() {
|
||||
# remplacer les valeur des variables $1..* par les valeurs normalisées
|
||||
# respectives de leur valeur "oui"
|
||||
local __nyv_yesvar
|
||||
for __nyv_yesvar in "$@"; do
|
||||
is_yes "${!__nyv_yesvar}" && _setv "$__nyv_yesvar" 1 || _setv "$__nyv_yesvar" ""
|
||||
done
|
||||
}
|
||||
|
||||
function setb() {
|
||||
# Lancer la commande $2..@ en supprimant la sortie standard. Si la commande
|
||||
# retourne vrai, assigner la valeur 1 à la variable $1. Sinon, lui assigner la
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
## Fonctions de base: support des fonctions obsolètes et des versions de bash < 4.x
|
||||
##@cooked nocomments
|
||||
##@include base.core
|
||||
##@include base.num
|
||||
##@include base.bool
|
||||
##@include base.quote
|
||||
##@include base.string
|
||||
##@include base.bool
|
||||
uprovide base.compat
|
||||
urequire base.core base.num base.bool base.quote
|
||||
|
||||
## Fonctions obsolètes
|
||||
|
||||
# base.core
|
||||
urequire base.core
|
||||
function setx2() { setxx "$@"; }
|
||||
function rawecho() { recho "$@"; }
|
||||
function rawecho_() { recho_ "$@"; }
|
||||
|
@ -22,16 +22,39 @@ function set_var_cmd() { echo_setv "$@"; }
|
|||
function set_var_literal() { eval "$1=$2"; }
|
||||
|
||||
# base.quote
|
||||
urequire base.quote
|
||||
function quote_awk() { _qawk "$@"; }
|
||||
function quoted_awk() { qawk "$@"; }
|
||||
function quote_seds() { qseds "$@"; }
|
||||
function quote_form() { _qform "$@"; }
|
||||
function quoted_form() { qform "$@"; }
|
||||
|
||||
## Fonctions dépréciées
|
||||
|
||||
function set_array_cmd() {
|
||||
# Afficher la commande permettant d'initialiser le tableau $1 avec les valeurs:
|
||||
# soit du tableau $2, soit de $3..$n si $2=="@"
|
||||
# S'il n'y a que l'argument $1, alors afficher la commande permettant de
|
||||
# recréer le tableau $1
|
||||
if [ $# -eq 1 ]; then echo_seta "$1"
|
||||
elif [ "$2" == @ ]; then echo_seta "$1" "${@:3}"
|
||||
else eval "echo_seta \"\$1\" \"\${$2[@]}\""
|
||||
fi
|
||||
}
|
||||
function set_array() {
|
||||
# Soit $1 un tableau à créer. Si $2=="@", créer le tableau $1 avec les valeurs
|
||||
# $3..$n. Sinon, créer le tableau $1 avec les valeurs du tableau $2.
|
||||
# Cette fonction n'existe que comme un pendant de set_var(), mais le véritable
|
||||
# intérêt est la fonction set_array_cmd(). cf array_copy() pour une version plus
|
||||
# efficace de la copie de tableaux
|
||||
eval "$(set_array_cmd "$@")"
|
||||
}
|
||||
|
||||
## Compatibilité avec bash >=2.x
|
||||
|
||||
if [ -n "$BASH_VERSINFO" -a "${BASH_VERSINFO[0]}" -lt 4 ]; then
|
||||
# base.string
|
||||
urequire base.string
|
||||
function strlower() { tr A-Z a-z <<<"$*"; }
|
||||
function strlower1() {
|
||||
local str="$*"
|
||||
|
@ -60,6 +83,7 @@ if [ -n "$BASH_VERSINFO" -a "${BASH_VERSINFO[0]}" -lt 4 ]; then
|
|||
}
|
||||
|
||||
# base.bool
|
||||
urequire base.bool
|
||||
function is_yes() {
|
||||
case "$1" in
|
||||
o|oui|y|yes|v|vrai|t|true|on) return 0;;
|
||||
|
|
|
@ -11,9 +11,9 @@ 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$@"
|
||||
echo -n -
|
||||
echo "$first" "$@"
|
||||
else
|
||||
echo "$@"
|
||||
fi
|
||||
|
@ -22,9 +22,9 @@ 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$@"
|
||||
echo -n -
|
||||
echo -n "$first" "$@"
|
||||
else
|
||||
echo -n "$@"
|
||||
fi
|
||||
|
@ -45,11 +45,12 @@ function _qval() {
|
|||
}
|
||||
function should_quote() {
|
||||
# Tester si la chaine $* doit être mise entre quotes
|
||||
local l="${#1}"
|
||||
local s="$*"
|
||||
local l="${#s}"
|
||||
# pour optimiser, toujours mettre entre quotes une chaine vide ou de plus de 80 caractères
|
||||
[ $l -eq 0 -o $l -gt 80 ] && return 0
|
||||
# sinon, tester si la chaine contient des caractères spéciaux
|
||||
local s="${*//[a-zA-Z0-9]/}"
|
||||
s="${s//[a-zA-Z0-9]/}"
|
||||
s="${s//,/}"
|
||||
s="${s//./}"
|
||||
s="${s//+/}"
|
||||
|
@ -165,7 +166,7 @@ function qlines() {
|
|||
sed "s/'/'\\\\''/g; s/.*/'&'/g"
|
||||
}
|
||||
function setv() {
|
||||
# initialiser la variable $1 avec la valeur $2*
|
||||
# initialiser la variable $1 avec la valeur $2..*
|
||||
# note: en principe, la syntaxe est 'setv var values...'. cependant, la
|
||||
# syntaxe 'setv var=values...' est supportée aussi
|
||||
local __s_var="$1"; shift
|
||||
|
@ -190,6 +191,45 @@ function echo_setv() {
|
|||
fi
|
||||
echo "$__s_var=$(qvalr "$*")"
|
||||
}
|
||||
function seta() {
|
||||
# initialiser le tableau $1 avec les valeurs $2..@
|
||||
# note: en principe, la syntaxe est 'seta array values...'. cependant, la
|
||||
# syntaxe 'seta array=values...' est supportée aussi
|
||||
local __s_array="$1"; shift
|
||||
if [[ "$__s_array" == *=* ]]; then
|
||||
set -- "${__s_array#*=}" "$@"
|
||||
__s_array="${__s_array%%=*}"
|
||||
fi
|
||||
eval "$__s_array=(\"\$@\")"
|
||||
}
|
||||
function _seta() {
|
||||
# Comme la fonction seta() mais ne supporte que la syntaxe '_seta array values...'
|
||||
# Cette fonction est légèrement plus rapide que seta()
|
||||
local __s_array="$1"; shift
|
||||
eval "$__s_array=(\"\$@\")"
|
||||
}
|
||||
function echo_seta() {
|
||||
# Afficher la commande qui serait lancée par seta "$@"
|
||||
local __s_var="$1"; shift
|
||||
if [[ "$__s_var" == *=* ]]; then
|
||||
set -- "${__s_var#*=}" "$@"
|
||||
__s_var="${__s_var%%=*}"
|
||||
fi
|
||||
echo "$__s_var=($(qvals "$@"))"
|
||||
}
|
||||
function echo_seta2() {
|
||||
# Afficher la commande qui recrée le tableau $1
|
||||
# Si des arguments sont spécifiés, cette fonction se comporte comme
|
||||
# echo_seta()
|
||||
local __s_var="$1"; shift
|
||||
if [[ "$__s_var" == *=* ]]; then
|
||||
set -- "${__s_var#*=}" "$@"
|
||||
__s_var="${__s_var%%=*}"
|
||||
elif [ $# -eq 0 ]; then
|
||||
eval "set -- \"\${$__s_var[@]}\""
|
||||
fi
|
||||
echo "$__s_var=($(qvals "$@"))"
|
||||
}
|
||||
function setx() {
|
||||
# syntaxe 1: setx var cmd
|
||||
# initialiser la variable $1 avec le résultat de la commande "$2..@"
|
||||
|
@ -234,8 +274,9 @@ function _setax() {
|
|||
function evalx() {
|
||||
# Implémenter une syntaxe lisible et naturelle permettant d'enchainer des
|
||||
# traitements sur une valeur. Par exemple, la commande
|
||||
# evalx cmd1... // cmd2... // cmd3...
|
||||
# affiche le résultat de la commande "$(cmd3 $(cmd2 $(cmd1)))"
|
||||
# evalx cmd1 [args1...] // cmd2 [args2...] // cmd3 [args3...]
|
||||
# est équivalente à la commande
|
||||
# cmd3 args3 "$(cmd2 args2 "$(cmd1 args1)")"
|
||||
# Retourner le dernier code d'erreur non nul, ou 0 si toutes les commandes se
|
||||
# sont exécutées sans erreur.
|
||||
local __e_val __e_arg __e_r=0
|
||||
|
@ -285,7 +326,7 @@ function evalp() {
|
|||
# un flux de données. Par exemple, la commande
|
||||
# evalp cmd1... // cmd2... // cmd3...
|
||||
# affiche le résultat de la commande "$(cmd1 | cmd2 | cmd3)"
|
||||
# Typiquement, cette fonction permet de faciliter la construction d'un
|
||||
# Typiquement, cette fonction permet de faciliter la *construction* d'un
|
||||
# enchainement de commandes par programme, ou de faciliter l'utilisation de la
|
||||
# fonction setx() pour récupérer le résultat d'un enchainement. Dans les autres
|
||||
# cas, il est plus simple et naturel d'écrire les enchainements avec la syntaxe
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
## Fonctions dépréciées
|
||||
##@cooked nocomments
|
||||
uprovide base.deprecated
|
||||
|
||||
# base.array
|
||||
|
||||
function set_array_cmd() {
|
||||
# Afficher la commande permettant d'initialiser le tableau $1 avec les valeurs:
|
||||
# soit du tableau $2, soit de $3..$n si $2=="@"
|
||||
# S'il n'y a que l'argument $1, alors afficher la commande permettant de
|
||||
# recréer le tableau $1
|
||||
if [ $# -eq 1 ]; then echo_seta2 "$1"
|
||||
elif [ "$2" == @ ]; then echo_seta "$1" "${@:3}"
|
||||
else eval "echo_seta \"\$1\" \"\${$2[@]}\""
|
||||
fi
|
||||
}
|
||||
function set_array() {
|
||||
# Soit $1 un tableau à créer. Si $2=="@", créer le tableau $1 avec les valeurs
|
||||
# $3..$n. Sinon, créer le tableau $1 avec les valeurs du tableau $2.
|
||||
# Cette fonction n'existe que comme un pendant de set_var(), mais le véritable
|
||||
# intérêt est la fonction set_array_cmd(). cf array_copy() pour une version plus
|
||||
# efficace de la copie de tableaux
|
||||
eval "$(set_array_cmd "$@")"
|
||||
}
|
||||
|
||||
# base.misc
|
||||
|
||||
function quote_in() {
|
||||
# Comme quote_arg pour une chaine lue sur stdin
|
||||
sed 's/\\/\\\\/g
|
||||
s/"/\\"/g
|
||||
s/\$/\\$/g
|
||||
s/`/\\`/g'
|
||||
}
|
||||
function quote_sin() {
|
||||
# Pour la chaine lue sur stdin, remplacer ' par '\''. Cela permet de protéger une
|
||||
# chaine à mettre entre quotes
|
||||
sed "s/'/'\\\\''/g"
|
||||
}
|
||||
function quote_sarg() {
|
||||
# Dans la chaine $1, remplacer ' par '\''. Cette fonction utilise quote_sin,
|
||||
# puisque le shell a des difficultés à faire le rechercher/remplacer approprié
|
||||
quote_sin <<<"$1"
|
||||
}
|
||||
function quoted_sarg() {
|
||||
# Dans la chaine $1, remplacer ' par '\'', et afficher la chaine entourée de
|
||||
# quotes
|
||||
echo "'$(quote_sarg "$1")'"
|
||||
}
|
||||
function quoted_sargs() {
|
||||
# Comme quoted_sarg, mais tous les arguments sont quotés et affichés entourés de
|
||||
# quotes, ce qui permet de construire des arguments d'une ligne de commande
|
||||
local a s
|
||||
for a in "$@"; do
|
||||
s="${s:+$s }$(quoted_sarg "$a")"
|
||||
done
|
||||
recho "$s"
|
||||
}
|
|
@ -33,10 +33,17 @@ export TMPDIR="${TMPDIR:-${TMP:-${TEMP:-/tmp}}}"
|
|||
[ -z "$USER" -a -n "$LOGNAME" ] && export USER="$LOGNAME"
|
||||
|
||||
# Le fichier nutoolsrc doit être chargé systématiquement
|
||||
# note: ajouter 'true' après le chargement de *nutoolsrc pour éviter que le
|
||||
# module se termine sur une erreur si ces fichiers n'existent pas, ce qui
|
||||
# empêcherait de le charger avec urequire()
|
||||
[ -f /etc/debian_chroot ] && UTOOLS_CHROOT=1
|
||||
[ -f /etc/nutoolsrc ] && . /etc/nutoolsrc
|
||||
[ -f ~/.nutoolsrc ] && . ~/.nutoolsrc
|
||||
true
|
||||
|
||||
# Type de système sur lequel tourne le script
|
||||
UNAME_SYSTEM=`uname -s`
|
||||
[ "${UNAME_SYSTEM#CYGWIN}" != "$UNAME_SYSTEM" ] && UNAME_SYSTEM=Cygwin
|
||||
[ "${UNAME_SYSTEM#MINGW32}" != "$UNAME_SYSTEM" ] && UNAME_SYSTEM=Mingw
|
||||
UNAME_MACHINE=`uname -m`
|
||||
if [ -n "$UTOOLS_CHROOT" ]; then
|
||||
# Dans un chroot, il est possible de forcer les valeurs
|
||||
[ -n "$UTOOLS_UNAME_SYSTEM" ] && eval "UNAME_SYSTEM=$UTOOLS_UNAME_SYSTEM"
|
||||
[ -n "$UTOOLS_UNAME_MACHINE" ] && eval "UNAME_MACHINE=$UTOOLS_UNAME_MACHINE"
|
||||
fi
|
||||
|
|
|
@ -27,3 +27,8 @@ function isrnum() {
|
|||
v="${v//[0-9]/}"
|
||||
[ -z "$v" ]
|
||||
}
|
||||
|
||||
function evali() {
|
||||
# Evaluer une expression numérique
|
||||
echo "$(($*))"
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
## Fonctions de base: gestion des valeurs scalaires
|
||||
## Fonctions de base: gestion des valeurs chaines scalaires
|
||||
##@cooked nocomments
|
||||
# Note: contient du code spécifique à bash 4. Le module base.compat réimplémente
|
||||
# les fonctions concernées pour les rendre compatible avec bash >= 2.x
|
||||
|
@ -11,35 +11,35 @@ urequire base.core
|
|||
# il faut d'abord le traiter avec _qval()
|
||||
|
||||
function straddp() {
|
||||
# ajouter le préfixe $1 à $2*
|
||||
# ajouter le préfixe $1 à $2..*
|
||||
local p="$1"; shift
|
||||
echo "$p$*"
|
||||
}
|
||||
function strdelp() {
|
||||
# enlever le préfixe $1 à $2*
|
||||
# enlever le préfixe $1 à $2..*
|
||||
local p="$1"; shift
|
||||
local str="$*"
|
||||
echo "${str#$p}"
|
||||
}
|
||||
function strdelp2() {
|
||||
# enlever le préfixe $1 le plus long à $2*
|
||||
# enlever le préfixe $1 le plus long à $2..*
|
||||
local p="$1"; shift
|
||||
local str="$*"
|
||||
echo "${str##$p}"
|
||||
}
|
||||
function stradds() {
|
||||
# ajouter le suffixe $1 à $2*
|
||||
# ajouter le suffixe $1 à $2..*
|
||||
local s="$1"; shift
|
||||
echo "$*$s"
|
||||
}
|
||||
function strdels() {
|
||||
# enlever le suffixe $1 à $2*
|
||||
# enlever le suffixe $1 à $2..*
|
||||
local s="$1"; shift
|
||||
local str="$*"
|
||||
echo "${str%$s}"
|
||||
}
|
||||
function strdels2() {
|
||||
# enlever le suffixe le plus long $1 à $2*
|
||||
# enlever le suffixe le plus long $1 à $2..*
|
||||
local s="$1"; shift
|
||||
local str="$*"
|
||||
echo "${str%%$s}"
|
||||
|
@ -76,7 +76,7 @@ function struppers() {
|
|||
echo "${*^}"
|
||||
}
|
||||
function strmid() {
|
||||
# Afficher la plage $1 de la valeur $2*. La plage peut être d'une des formes
|
||||
# Afficher la plage $1 de la valeur $2..*. La plage peut être d'une des formes
|
||||
# 'start', '[start]:length'. Si start est négatif, le compte est effectué à
|
||||
# partir de la fin de la chaine. Si length est négatif, il est rajouté à la
|
||||
# longueur de la chaine à partir de start
|
||||
|
@ -100,7 +100,7 @@ function strmid() {
|
|||
eval 'echo "${str:'" $range"'}"'
|
||||
}
|
||||
function strrepl() {
|
||||
# Remplacer dans la valeur $3* le motif $1 par la chaine $2. $1 peut commencer
|
||||
# Remplacer dans la valeur $3..* le motif $1 par la chaine $2. $1 peut commencer
|
||||
# par l'un des caractères /, #, % pour indiquer le type de recherche
|
||||
local pattern="$1"; shift
|
||||
local repl="$1"; shift
|
||||
|
@ -217,3 +217,97 @@ function endswith() {
|
|||
local str="$1" pattern="$2"
|
||||
eval '[ "${str%$pattern}" != "$str" ]'
|
||||
}
|
||||
|
||||
function strsplitf() {
|
||||
# Cette fonction doit être appelée avec N arguments (avec N>1). Elle analyse et
|
||||
# découpe l'argument $N comme avec une ligne de commande du shell. Ensuite, elle
|
||||
# appelle la fonction $1 avec les arguments de $2 à ${N-1}, suivi des arguments
|
||||
# obtenus lors de l'analyse de l'argument $N. Par exemple, la commande suivante:
|
||||
# strsplitf cmd arg1 "long arg2" "arg3 'long arg4'"
|
||||
# est équivalente à:
|
||||
# cmd arg1 "long arg2" arg3 "long arg4"
|
||||
# Retourner le code 127 si la fonction à appeler n'est pas spécifiée. Retourner
|
||||
# le code 126 si une erreur s'est produite lors de l'analyse de l'argument $N
|
||||
[ $# -gt 0 ] || return 127
|
||||
local func count
|
||||
func="$1"; shift
|
||||
count=$#
|
||||
if [ $count -gt 0 ]; then
|
||||
eval 'set -- "${@:1:$(($count-1))}" '"${!count}" || return 126
|
||||
fi
|
||||
"$func" "$@"
|
||||
}
|
||||
function strecho() { recho "$@"; }
|
||||
function strqvals() {
|
||||
# Afficher chaque argument à part avec des quotes. A chainer avec strsplitf()
|
||||
qvals "$@"
|
||||
}
|
||||
function strqlines() {
|
||||
# Afficher chaque ligne des fichiers spécifiés comme un argument. A chainer avec
|
||||
# strsplitf()
|
||||
local -a lines
|
||||
_setax lines cat "$@"
|
||||
qvals "${lines[@]}"
|
||||
}
|
||||
function strqarray() {
|
||||
# Afficher chaque valeur des tableaux $@ comme un argument. A chainer avec
|
||||
# strsplitf()
|
||||
local __a __s="qvals"
|
||||
for __a in "$@"; do __s="$__s \"\${$__a[@]}\""; done
|
||||
eval "$__s"
|
||||
}
|
||||
|
||||
function evals() {
|
||||
# Enchainer des traitements sur des chaines de caractères, comme pour la fonction
|
||||
# evalx(). Il y a cependant quelques différences:
|
||||
# - Seules certains fonctions spécifiques peuvent être utilisées: elles sont
|
||||
# reconnaissables à leur préfixe 'str'. En effet, lors de l'utilisation d'une
|
||||
# commande par evals(), le préfixe 'str' est systématiquement ajouté.
|
||||
# - La fonction strsplitf() est traitée de façon particulière pour lancer une
|
||||
# commande avec le préfixe 'str'
|
||||
# Ainsi, la commande suivante:
|
||||
# evals cmd1 // splitf cmd2
|
||||
# est équivalente à la commande:
|
||||
# strplitf strcmd2 "$(strcmd1)"
|
||||
local __e_val __e_arg __e_r=0
|
||||
local __e_firstcmd __e_firstarg __e_splitf
|
||||
local -a __e_cmd
|
||||
|
||||
__e_firstcmd=1
|
||||
while [ $# -gt 0 ]; do
|
||||
__e_cmd=()
|
||||
__e_firstarg=1 # premier argument
|
||||
__e_splitf= # premier argument après splitf
|
||||
while [ $# -gt 0 ]; do
|
||||
__e_arg="$1"; shift
|
||||
[ "$__e_arg" == // ] && break
|
||||
if [ "${__e_arg%//}" != "$__e_arg" ]; then
|
||||
local __e_tmp="${__e_arg%//}"
|
||||
if [ -z "${__e_tmp//\\/}" ]; then
|
||||
__e_arg="${__e_arg#\\}"
|
||||
__e_cmd=("${__e_cmd[@]}" "$__e_arg")
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
if [ -n "$__e_firstarg" ]; then
|
||||
__e_cmd=("str$__e_arg")
|
||||
__e_firstarg=
|
||||
[ "$__e_arg" == "splitf" ] && __e_splitf=1
|
||||
elif [ -n "$__e_splitf" ]; then
|
||||
__e_cmd=("${__e_cmd[@]}" "str$__e_arg")
|
||||
__e_splitf=
|
||||
else
|
||||
__e_cmd=("${__e_cmd[@]}" "$__e_arg")
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "$__e_firstcmd" ]; then
|
||||
__e_val="$("${__e_cmd[@]}")" || __e_r=$?
|
||||
else
|
||||
__e_val="$("${__e_cmd[@]}" "$__e_val")" || __e_r=$?
|
||||
fi
|
||||
__e_firstcmd=
|
||||
done
|
||||
[ -n "$__e_val" ] && echo "$__e_val"
|
||||
return $__e_r
|
||||
}
|
||||
|
|
|
@ -270,7 +270,7 @@ if check_sysinfos -s macosx; then
|
|||
done
|
||||
args=("${args[@]}" "$@")
|
||||
fi
|
||||
quoted_args "${options[@]}" -- "${args[@]}"
|
||||
qvals "${options[@]}" -- "${args[@]}"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ function conf_enable() {
|
|||
fi
|
||||
if [ "$name" != "$param" ]; then
|
||||
# Ensuite, mettre à jour le fichier avec la valeur spécifiée
|
||||
to="$(quote_seds "$value")"
|
||||
to="$(qseds "$value")"
|
||||
sedi "\
|
||||
/^[ $TAB]*export[ $TAB]*$name[ $TAB]*=/s/^\([ $TAB]*export[ $TAB]*$name[ $TAB]*=[ $TAB]*\).*\$/\\1$to/
|
||||
/^[ $TAB]*$name[ $TAB]*=/s/^\([ $TAB]*$name[ $TAB]*=[ $TAB]*\).*\$/\\1$to/
|
||||
|
@ -61,14 +61,14 @@ function conf_enable() {
|
|||
}
|
||||
|
||||
function conf_enableq() {
|
||||
# Comme conf_enable(), mais s'assure que les valeurs sont quotées dans le
|
||||
# fichier. Ceci permet de stocker des valeurs avec des espaces ou des
|
||||
# caractères spéciaux.
|
||||
# Comme conf_enable(), mais s'assure que les valeurs sont quotées si
|
||||
# nécessaire dans le fichier. Ceci permet de stocker des valeurs avec des
|
||||
# espaces ou des caractères spéciaux.
|
||||
local args arg name value
|
||||
args=("$1"); shift
|
||||
for arg in "$@"; do
|
||||
splitvar "$arg" name value
|
||||
array_add args "$name=$(quoted_arg "$value")"
|
||||
array_add args "$name=$(qvalm "$value")"
|
||||
done
|
||||
conf_enable "${args[@]}"
|
||||
}
|
||||
|
@ -94,8 +94,8 @@ function conf_disable() {
|
|||
from0="^[ $TAB]*export[ $TAB]*$name[ $TAB]*="
|
||||
from1="^[ $TAB]*$name[ $TAB]*="
|
||||
if [ "$name" != "$param" ]; then
|
||||
from0="$from0$(quote_seds "$value")\$"
|
||||
from1="$from1$(quote_seds "$value")\$"
|
||||
from0="$from0$(qseds "$value")\$"
|
||||
from1="$from1$(qseds "$value")\$"
|
||||
fi
|
||||
if quietgrep "$from" "$conf"; then
|
||||
sedi "\
|
||||
|
@ -131,7 +131,7 @@ function conf_append() {
|
|||
local param name value from
|
||||
for param in "$@"; do
|
||||
splitvar "$param" name value
|
||||
echo "$name=\"\${$name:+\$$name$CONF_APPEND_SEP}$(quote_arg "$value")\"" >>"$conf"
|
||||
echo "$name=\"\${$name:+\$$name$CONF_APPEND_SEP}$(_qval "$value")\"" >>"$conf"
|
||||
modified=0
|
||||
done
|
||||
|
||||
|
@ -160,11 +160,11 @@ function conf_array_append() {
|
|||
if quietgrep "^[ $TAB]*\(export[ $TAB]*\)\?$name=(" "$conf"; then
|
||||
# variable déjà existante
|
||||
[ "$name" != "$param" ] || continue
|
||||
echo "$name=(\"\${$name[@]}\" $(quoted_arg "$value"))" >>"$conf"
|
||||
echo "$name=(\"\${$name[@]}\" $(qvalm "$value"))" >>"$conf"
|
||||
else
|
||||
# nouvelle variable
|
||||
if [ "$name" != "$param" ]; then
|
||||
echo "$name=($(quoted_arg "$value"))" >>"$conf"
|
||||
echo "$name=($(qvalm "$value"))" >>"$conf"
|
||||
else
|
||||
echo "$name=()" >>"$conf"
|
||||
fi
|
||||
|
@ -191,7 +191,7 @@ function conf_check() {
|
|||
splitvar "$param" name value
|
||||
from="^[ $TAB]*\(export[ $TAB]*\)\?$name[ $TAB]*="
|
||||
if [ "$name" != "$param" ]; then
|
||||
from="$from$(quote_seds "$value")\$"
|
||||
from="$from$(qseds "$value")\$"
|
||||
fi
|
||||
quietgrep "$from" "$conf" || return 1
|
||||
done
|
||||
|
@ -232,7 +232,7 @@ function aconf_enable() {
|
|||
fi
|
||||
if [ "$name" != "$param" ]; then
|
||||
# Ensuite, mettre à jour le fichier avec la valeur spécifiée
|
||||
to="$(quote_seds "$value")"
|
||||
to="$(qseds "$value")"
|
||||
sedi "\
|
||||
/^[ $TAB]*$name[ $TAB][ $TAB]*/s/^\([ $TAB]*$name[ $TAB]*\).*$/\\1$to/
|
||||
/^[ $TAB]*$name\$/s/^\([ $TAB]*$name\)\$/\\1 $to/" "$conf"
|
||||
|
@ -265,7 +265,7 @@ function aconf_disable() {
|
|||
# Essayer simplement de commenter la valeur dans le fichier
|
||||
from="^[ $TAB]*$name[ $TAB]*"
|
||||
if [ "$name" != "$param" ]; then
|
||||
from="$from$(quote_seds "$value")\$"
|
||||
from="$from$(qseds "$value")\$"
|
||||
fi
|
||||
if quietgrep "$from" "$conf"; then
|
||||
sedi "/$from/"'s/^/#/g' "$conf"
|
||||
|
@ -317,7 +317,7 @@ function aconf_check() {
|
|||
splitvar "$param" name value
|
||||
from="^[ $TAB]*$name[ $TAB]*"
|
||||
if [ "$name" != "$param" ]; then
|
||||
from="$from$(quote_seds "$value")\$"
|
||||
from="$from$(qseds "$value")\$"
|
||||
fi
|
||||
quietgrep "$from" "$conf" || return 1
|
||||
done
|
||||
|
@ -350,17 +350,17 @@ function mconf_enable() {
|
|||
local script i param name value
|
||||
script="BEGIN {
|
||||
modified = 1
|
||||
section = $(quoted_awk "$section")
|
||||
section = $(qawk "$section")
|
||||
in_section = 0"
|
||||
i=0
|
||||
for param in "$@"; do
|
||||
splitvar "$param" name value
|
||||
script="$script
|
||||
names[$i] = $(quoted_awk "$name")"
|
||||
names[$i] = $(qawk "$name")"
|
||||
if [ "$name" != "$param" ]; then
|
||||
script="$script
|
||||
hasvalues[$i] = 1
|
||||
values[$i] = $(quoted_awk "$value")"
|
||||
values[$i] = $(qawk "$value")"
|
||||
else
|
||||
script="$script
|
||||
hasvalues[$i] = 0
|
||||
|
@ -445,7 +445,7 @@ function mconf_disable() {
|
|||
local script match
|
||||
script="BEGIN {
|
||||
modified = 1
|
||||
section = $(quoted_awk "$section")
|
||||
section = $(qawk "$section")
|
||||
in_section = 0
|
||||
"
|
||||
local param name value
|
||||
|
@ -453,7 +453,7 @@ function mconf_disable() {
|
|||
splitvar "$param" name value
|
||||
match="${match:+$match || }\$0 ~ /^[ $TAB]*$name[ $TAB]*="
|
||||
if [ "$name" != "$param" ]; then
|
||||
match="$match[ $TAB]*$(quote_seds "$value")\$"
|
||||
match="$match[ $TAB]*$(qseds "$value")\$"
|
||||
fi
|
||||
match="$match/"
|
||||
done
|
||||
|
@ -501,15 +501,15 @@ function mconf_append() {
|
|||
local script match
|
||||
script="BEGIN {
|
||||
modified = 1
|
||||
section=$(quoted_awk "$section")
|
||||
section=$(qawk "$section")
|
||||
in_section=0
|
||||
"
|
||||
i=0
|
||||
for param in "$@"; do
|
||||
splitvar "$param" name value
|
||||
script="$script
|
||||
names[$i] = $(quoted_awk "$name")
|
||||
values[$i] = $(quoted_awk "$value")
|
||||
names[$i] = $(qawk "$name")
|
||||
values[$i] = $(qawk "$value")
|
||||
seen[$i] = 0"
|
||||
let i=$i+1
|
||||
done
|
||||
|
@ -569,14 +569,14 @@ function mconf_check() {
|
|||
|
||||
local script i param name value
|
||||
script="BEGIN {
|
||||
section = $(quoted_awk "$section")
|
||||
section = $(qawk "$section")
|
||||
in_section = 0"
|
||||
i=0
|
||||
for param in "$@"; do
|
||||
splitvar "$param" name value
|
||||
script="$script
|
||||
names[$i] = $(quoted_awk "$name")
|
||||
values[$i] = $(quoted_awk "$value")
|
||||
names[$i] = $(qawk "$name")
|
||||
values[$i] = $(qawk "$value")
|
||||
seen[$i] = 0"
|
||||
let i=$i+1
|
||||
done
|
||||
|
@ -593,7 +593,7 @@ function mconf_check() {
|
|||
script="$script
|
||||
in_section && \$0 ~ /^[ $TAB]*$name[ $TAB]*="
|
||||
if [ "$name" != "$param" ]; then
|
||||
script="$script$(quote_seds "$value")\$"
|
||||
script="$script$(qseds "$value")\$"
|
||||
fi
|
||||
script="$script/ {
|
||||
seen[$i] = 1
|
||||
|
|
|
@ -112,7 +112,9 @@ __CTRESOLVE_CTNOW=""
|
|||
# eval "$(ctresolve <crontab)"
|
||||
function ctresolve() {
|
||||
local -a ctnow
|
||||
if [ -n "$__CTRESOLVE_CTNOW" ]; then
|
||||
if [ "$__CTRESOLVE_CTNOW" == "**ANY**" ]; then
|
||||
ctnow=("$__CTRESOLVE_CTNOW")
|
||||
elif [ -n "$__CTRESOLVE_CTNOW" ]; then
|
||||
eval "ctnow=($__CTRESOLVE_CTNOW)"
|
||||
else
|
||||
eval "ctnow=($(ctnow))"
|
||||
|
@ -153,6 +155,8 @@ function ctmatch_one(ctval, ref, parts, part, i, j, start, end, ste
|
|||
return ok
|
||||
}
|
||||
function ctmatch_all(M, H, dom, mon, dow, refM, refH, refdom, refmon, refdow, Mok, Hok, domok, monok, dowok) {
|
||||
if (refM == "**ANY**") return 1
|
||||
|
||||
gsub(/\*/, "0-59", M)
|
||||
Mok = ctmatch_one(M, refM)
|
||||
|
||||
|
|
|
@ -0,0 +1,485 @@
|
|||
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
## Fonction de support pour gérer le déploiement d'artifacts
|
||||
##@cooked nocomments
|
||||
|
||||
################################################################################
|
||||
# API publique
|
||||
|
||||
function deploy_query() {
|
||||
# Afficher le résultat d'une requête
|
||||
local alv
|
||||
eval "set -- $(getopt -ov: -lallow-vars: -- "$@")"
|
||||
while [ -n "$1" ]; do
|
||||
case "$1" in
|
||||
-v|--allow-vars)
|
||||
array_split alv "$2" ,
|
||||
shift; shift
|
||||
;;
|
||||
--) shift; break;;
|
||||
*) break;;
|
||||
esac
|
||||
done
|
||||
|
||||
local qtype="$1" otype="$2" ltype="$3" profile="$4" format="${5:-shell}" term="$6"
|
||||
local -a vs; local object type link
|
||||
|
||||
case "$qtype" in
|
||||
DEST|SOURCE)
|
||||
if [ -n "$otype" ]; then
|
||||
deploy_is_type "$otype" || {
|
||||
qvals false "$otype: invalid type"
|
||||
return 2
|
||||
}
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [ -n "$qtype" ]; then
|
||||
deploy_is_type "$qtype" || {
|
||||
qvals false "$qtype: invalid type"
|
||||
return 3
|
||||
}
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if [ -n "$ltype" ]; then
|
||||
deploy_is_link "$ltype" || {
|
||||
qvals false "$ltype: invalid link type"
|
||||
return 4
|
||||
}
|
||||
fi
|
||||
[ -n "$term" ] || {
|
||||
qvals false "search term required"
|
||||
return 5
|
||||
}
|
||||
|
||||
case "$qtype" in
|
||||
DEST)
|
||||
edebug "=== search type DEST"
|
||||
edebug "term=$term, otype=$otype"
|
||||
deploy_search_artifact object type "$term" "$otype" host || {
|
||||
qvals false "artifact not found"
|
||||
return 1
|
||||
}
|
||||
edebug "object=$object, type=$type"
|
||||
deploy_search_link link "$type" "$ltype" || {
|
||||
qvals false "link not found"
|
||||
return 1
|
||||
}
|
||||
|
||||
deploy_show_values object object "$format" shell alv
|
||||
deploy_show_values type otype "$format" shell alv
|
||||
deploy_show_values link ltype "$format" shell alv
|
||||
deploy_show_links "$object" "$link" "$profile" "$format" "" alv
|
||||
return 0
|
||||
;;
|
||||
SOURCE)
|
||||
# XXX implémenter
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
if deploy_search_artifact object type "$term" "$qtype"; then
|
||||
deploy_copy_object_values vs "$object" "$type"
|
||||
deploy_show_values object object "$format" shell alv
|
||||
deploy_show_values type otype "$format" shell alv
|
||||
deploy_show_values vs "$type" "$format" "" alv
|
||||
deploy_show_attrs "$object" "$type" "$format" alv
|
||||
return 0
|
||||
fi
|
||||
qvals false "artifact not found"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function deploy_setconf() {
|
||||
local confname="$1" confdir="$2"
|
||||
if [ -n "$confdir" ]; then
|
||||
confdir="$(abspath "$confdir")"
|
||||
if [[ "$confname" == */* ]] || [[ "$confname" == *.* ]]; then
|
||||
local d="$(abspath "$(dirname -- "$confname")")"
|
||||
if [ "$d" != "$confdir" ]; then
|
||||
CONFNAME="$confname"
|
||||
SFILE="$CONFNAME"
|
||||
DFILE="${CONFNAME%.conf}.vars"
|
||||
return
|
||||
fi
|
||||
confname="$(basename -- "$confname" .conf)"
|
||||
fi
|
||||
CONFNAME="${confname:-deploy}"
|
||||
IFILE="$confdir/init.conf"
|
||||
SFILE="$confdir/$CONFNAME.conf"
|
||||
else
|
||||
CONFNAME="${confname:-deploy}"
|
||||
IFILE=
|
||||
SFILE=
|
||||
fi
|
||||
if is_root; then
|
||||
DFILE="/var/local/deploy/$CONFNAME.vars"
|
||||
else
|
||||
DFILE="$HOME/etc/deploy/$CONFNAME.vars"
|
||||
fi
|
||||
}
|
||||
|
||||
function deploy_loadconf() {
|
||||
# charger la configuration. deploy_setconf() DOIT être appelé avant
|
||||
if [ "$1" != --no-auto-update ]; then (
|
||||
# mettre à jour le cas échéant le fichier des variables
|
||||
DEPLOY_SRCDIR=; set_defaults deploy
|
||||
[ -n "$DEPLOY_SRCDIR" ] || DEPLOY_SRCDIR=~/wop/deploy
|
||||
[ -x "$DEPLOY_SRCDIR/query" ] && "$DEPLOY_SRCDIR/query" --nop -c "$CONFNAME"
|
||||
); fi
|
||||
[ -f "$DFILE" ] && source "$DFILE" || return 1
|
||||
}
|
||||
|
||||
function deploy_search_artifact() {
|
||||
local do="$1" dt="$2" term="$3" type="$4" nottype="$5"
|
||||
local -a ts os vs; local t o v object
|
||||
|
||||
deploy_copy_types ts
|
||||
for t in "${ts[@]}"; do
|
||||
[ -n "$type" -a "$t" != "$type" ] && continue
|
||||
[ -n "$nottype" -a "$t" == "$nottype" ] && continue
|
||||
|
||||
object=
|
||||
if deploy_is_object "$term" "$t"; then
|
||||
# on a déjà le bon identifiant
|
||||
object="$term"
|
||||
else
|
||||
# chercher un identifiant correspondant à la valeur
|
||||
deploy_copy_objects os "$t"
|
||||
for o in "${os[@]}"; do
|
||||
deploy_copy_object_values vs "$o" "$t"
|
||||
if array_contains vs "$term"; then
|
||||
object="$o"
|
||||
break
|
||||
fi
|
||||
if [[ "$term" != *.* ]]; then
|
||||
for v in "${vs[@]}"; do
|
||||
if [ "${v%%.*}" == "$term" ]; then
|
||||
object="$o"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
if [ -z "$object" ]; then
|
||||
# essayer sans tenir compte de la casse
|
||||
for o in "${os[@]}"; do
|
||||
if [ "${o,,}" == "${term,,}" ]; then
|
||||
object="$o"
|
||||
break
|
||||
fi
|
||||
deploy_copy_object_values vs "$o" "$t"
|
||||
for v in "${vs[@]}"; do
|
||||
if [ "${v,,}" == "${term,,}" ]; then
|
||||
object="$o"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [[ "$term" != *.* ]]; then
|
||||
for v in "${vs[@]}"; do
|
||||
v="${v%%.*}"
|
||||
if [ "${v,,}" == "${term,,}" ]; then
|
||||
object="$o"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
if [ -n "$object" ]; then
|
||||
upvars "$do" "$object" "$dt" "$t"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
function deploy_search_link() {
|
||||
local dl="$1" type="$2" link="$3"
|
||||
local -a ls ts; local l
|
||||
deploy_copy_links ls
|
||||
for l in "${ls[@]}"; do
|
||||
[ -n "$link" -a "$l" != "$link" ] && continue
|
||||
|
||||
deploy_copy_link_types ts "$l"
|
||||
if array_contains ts "$type"; then
|
||||
upvar "$dl" "$l"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
function deploy_show_values() {
|
||||
if [ -n "$5" ]; then
|
||||
if ! array_isempty "$5"; then
|
||||
array_contains "$5" "$2" || return
|
||||
fi
|
||||
fi
|
||||
local -a __sv_vs; array_copy __sv_vs "$1"
|
||||
local -a vs; array_copy vs __sv_vs
|
||||
local t="$2" f="${3:-shell}" ff="$4"
|
||||
[ -n "$ff" -a "$f" != "$ff" ] && return
|
||||
|
||||
case "$f" in
|
||||
shell)
|
||||
[ -n "$5" ] && echo "$t=()"
|
||||
deploy_dump_values "$t" vs
|
||||
;;
|
||||
line) array_to_lines vs;;
|
||||
*) array_join vs "$f";;
|
||||
esac
|
||||
}
|
||||
|
||||
function deploy_show_attrs() {
|
||||
if [ -n "$4" ]; then
|
||||
local -a __dsa_alv; array_copy __dsa_alv "$4"
|
||||
local -a alv; array_copy alv __dsa_alv
|
||||
fi
|
||||
local o="$1" t="$2" f="${3:-shell}" ff=shell
|
||||
[ -n "$ff" -a "$f" != "$ff" ] && return
|
||||
|
||||
local -a ons gns ans vs; local an
|
||||
deploy_prepare_copy_attrs ons gns "$o" "$t"
|
||||
deploy_copy_attr_names ans "$o" "$t" ons gns
|
||||
for an in "${ans[@]}"; do
|
||||
if [ -n "$4" ]; then
|
||||
if ! array_isempty "$4"; then
|
||||
array_contains alv "$an" || continue
|
||||
fi
|
||||
[ "$f" == shell ] && echo "$an=()"
|
||||
fi
|
||||
deploy_copy_attr_values vs "$an" "$o" "$t" ons
|
||||
deploy_dump_values "$an" vs
|
||||
done
|
||||
}
|
||||
|
||||
function deploy_show_links() {
|
||||
if [ -n "$6" ]; then
|
||||
local -a __dsl_alv; array_copy __dsl_alv "$6"
|
||||
local -a alv; array_copy alv __dsl_alv
|
||||
fi
|
||||
local o="$1" l="$2" profile="$3" f="${4:-shell}" ff="$5"
|
||||
local -a ps pons pgns ons gns ans ovs os; local p an av o
|
||||
[ -n "$ff" -a "$f" != "$ff" ] && return
|
||||
|
||||
deploy_copy_profiles ps 1
|
||||
for p in "${ps[@]}"; do
|
||||
[ -n "$profile" -a "$p" != "$profile" ] && continue
|
||||
deploy_show_values p profile "$format" shell alv
|
||||
|
||||
deploy_prepare_copy_link_attrs pons pgns ons gns "$o" "$l" "$p"
|
||||
deploy_copy_link_attr_names ans "$o" "$l" "$p" pons pgns ons gns
|
||||
for an in "${ans[@]}"; do
|
||||
deploy_copy_link_attr_values avs "$an" "$o" "$l" "$p" pons pgns ons gns
|
||||
if [ "$an" == host ]; then
|
||||
# toujours montrer host
|
||||
#deploy_show_values avs "$an" "$f" "$ff"
|
||||
ovs=()
|
||||
for av in "${avs[@]}"; do
|
||||
deploy_copy_object_values os "$av" host
|
||||
array_extendu ovs os
|
||||
done
|
||||
deploy_show_values ovs host "$f" "$ff" alv
|
||||
else
|
||||
deploy_show_values avs "$an" "$f" shell alv
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Fonctions bas niveau
|
||||
|
||||
function deploy_is_profile() {
|
||||
# tester si $1 est un profil valide
|
||||
[ -z "$1" ] && return 0 # pas de profil == profil valide
|
||||
array_contains LISTOF_PROFILES "$1"
|
||||
}
|
||||
function deploy_copy_profiles() {
|
||||
# copier la liste des profils valides dans le tableau $1
|
||||
# si LISTOF_PROFILES est vide et que $2!="", alors mettre une chaine vide
|
||||
# dans le tableau $1
|
||||
array_upvar "$1" "${LISTOF_PROFILES[@]}"
|
||||
if array_isempty "$1" && [ -n "$2" ]; then
|
||||
array_add "$1" ""
|
||||
fi
|
||||
}
|
||||
function deploy_is_type() {
|
||||
# tester si $1 est un type valide
|
||||
array_contains LISTOF_TYPES "$1"
|
||||
}
|
||||
function deploy_copy_types() {
|
||||
# copier la liste des types valides dans le tableau $1
|
||||
array_upvar "$1" "${LISTOF_TYPES[@]}"
|
||||
}
|
||||
function deploy_is_object() {
|
||||
# tester si $1 est un objet valide de type $2
|
||||
local o="$1" t="${2:-host}"
|
||||
array_contains "LISTOF_${t}s" "$o"
|
||||
}
|
||||
function deploy_copy_objects() {
|
||||
# copier la liste des objets valides de type $2 dans le tableau $1
|
||||
local d="$1" t="${2:-host}"
|
||||
local -a os
|
||||
array_copy os "LISTOF_${t}s"
|
||||
array_upvar "$d" "${os[@]}"
|
||||
}
|
||||
function deploy_copy_object_values() {
|
||||
local d="$1" o="$2" t="${3:-host}"
|
||||
local -a vs
|
||||
array_copy vs "${o}_${t}"
|
||||
array_upvar "$d" "${vs[@]}"
|
||||
}
|
||||
function deploy_prepare_copy_attrs() {
|
||||
local dons="$1" dgns="$2" o="$3" t="${4:-host}"
|
||||
local -a ons gns
|
||||
array_copy ons "LISTOF_${o}_${t}_vars"
|
||||
array_copy gns "LISTOF_${t}_vars"
|
||||
upvars \
|
||||
-a${#ons[*]} "$dons" "${ons[@]}" \
|
||||
-a${#gns[*]} "$dgns" "${gns[@]}"
|
||||
}
|
||||
function deploy_copy_attr_names() {
|
||||
local d="$1" o="$2" t="${3:-host}" __pca_ons="$4" __pca_gns="$5"
|
||||
local -a ns
|
||||
if [ -n "$__pca_ons" -a -n "$__pca_gns" ]; then
|
||||
# variables ons et gns déjà préparées par deploy_prepare_copy_attrs()
|
||||
array_copy ns "$__pca_ons"
|
||||
array_extendu ns "$__pca_gns"
|
||||
else
|
||||
local -a ons gns
|
||||
array_copy ons "LISTOF_${o}_${t}_vars"
|
||||
array_copy gns "LISTOF_${t}_vars"
|
||||
array_copy ns ons
|
||||
array_extendu ns gns
|
||||
fi
|
||||
array_upvar "$d" "${ns[@]}"
|
||||
}
|
||||
function deploy_copy_attr_values() {
|
||||
local d="$1" n="$2" o="$3" t="${4:-host}" __pca_ons="$5"
|
||||
local -a vs ns
|
||||
local n
|
||||
if [ -n "$__pca_ons" ]; then
|
||||
# variables ons déjà préparée par deploy_prepare_copy_attrs()
|
||||
if array_contains "$__pca_ons" "$n"; then
|
||||
array_copy vs "${o}_${t}_${n}"
|
||||
else
|
||||
array_copy vs "${t}_${n}"
|
||||
fi
|
||||
else
|
||||
local -a ons gns
|
||||
array_copy ons "LISTOF_${o}_${t}_vars"
|
||||
array_copy gns "LISTOF_${t}_vars"
|
||||
if array_contains ons "$n"; then
|
||||
array_copy vs "${o}_${t}_${n}"
|
||||
else
|
||||
array_copy vs "${t}_${n}"
|
||||
fi
|
||||
fi
|
||||
array_upvar "$d" "${vs[@]}"
|
||||
}
|
||||
|
||||
function deploy_is_link() {
|
||||
# tester si $1 est un type de lien valide
|
||||
array_contains LISTOF_LINKS "$1"
|
||||
}
|
||||
function deploy_copy_links() {
|
||||
array_upvar "$1" "${LISTOF_LINKS[@]}"
|
||||
}
|
||||
function deploy_copy_link_types() {
|
||||
local d="$1" l="${2:-deploy}"
|
||||
local -a ts
|
||||
array_copy ts "LISTOF_${l}_LINKTO"
|
||||
array_upvar "$d" "${ts[@]}"
|
||||
}
|
||||
function deploy_prepare_copy_link_attrs() {
|
||||
local dpons="$1" dpgns="$2" dons="$3" dgns="$4" o="$5" l="${6:-deploy}" p="$7"
|
||||
local -a pons pgns ons gns
|
||||
if [ -n "$p" ]; then
|
||||
array_copy pons "LISTOF_${p}__${o}_${l}_vars"
|
||||
array_copy pgns "LISTOF_${p}__${l}_vars"
|
||||
fi
|
||||
array_copy ons "LISTOF_${o}_${l}_vars"
|
||||
array_copy gns "LISTOF_${l}_vars"
|
||||
upvars \
|
||||
-a${#pons[*]} "$dpons" "${pons[@]}" \
|
||||
-a${#pgns[*]} "$dpgns" "${pgns[@]}" \
|
||||
-a${#ons[*]} "$dons" "${ons[@]}" \
|
||||
-a${#gns[*]} "$dgns" "${gns[@]}"
|
||||
}
|
||||
function deploy_copy_link_attr_names() {
|
||||
local d="$1" o="$2" l="${3:-deploy}" p="$4"
|
||||
local __pca_pons="$5" __pca_pgns="$6" __pca_ons="$7" __pca_gns="$8"
|
||||
local -a ns
|
||||
if [ -n "$__pca_pons" -a -n "$__pca_pgns" -a -n "$__pca_ons" -a -n "$__pca_gns" ]; then
|
||||
# variables pons, pgns, ons et gns déjà préparées par la fonction
|
||||
# deploy_prepare_copy_link_attrs()
|
||||
array_copy ns "$__pca_pons"
|
||||
array_extendu ns "$__pca_pgns"
|
||||
array_extendu ns "$__pca_ons"
|
||||
array_extendu ns "$__pca_gns"
|
||||
else
|
||||
local -a pons pgns ons gns
|
||||
if [ -n "$p" ]; then
|
||||
array_copy pons "LISTOF_${p}__${o}_${l}_vars"
|
||||
array_copy pgns "LISTOF_${p}__${l}_vars"
|
||||
fi
|
||||
array_copy ons "LISTOF_${o}_${l}_vars"
|
||||
array_copy gns "LISTOF_${l}_vars"
|
||||
array_copy ns pons
|
||||
array_extendu ns pgns
|
||||
array_extendu ns ons
|
||||
array_extendu ns gns
|
||||
fi
|
||||
array_upvar "$d" "${ns[@]}"
|
||||
}
|
||||
function deploy_copy_link_attr_values() {
|
||||
local d="$1" n="$2" o="$3" l="${4:-deploy}" p="$5"
|
||||
local __pca_pons="$6" __pca_pgns="$7" __pca_ons="$8" __pca_gns="$9"
|
||||
local -a vs ns
|
||||
local n
|
||||
if [ -n "$__pca_pons" -a -n "$__pca_pgns" -a -n "$__pca_ons" -a -n "$__pca_gns" ]; then
|
||||
# variables pons et ons déjà préparées par la fonction
|
||||
# deploy_prepare_copy_link_attrs()
|
||||
if array_contains "$__pca_pons" "$n"; then
|
||||
array_copy vs "${p}__${o}_${l}_${n}"
|
||||
elif array_contains "$__pca_pgns" "$n"; then
|
||||
array_copy vs "${p}__${l}_${n}"
|
||||
elif array_contains "$__pca_ons" "$n"; then
|
||||
array_copy vs "${o}_${l}_${n}"
|
||||
else
|
||||
array_copy vs "${l}_${n}"
|
||||
fi
|
||||
else
|
||||
local -a pons pgns ons gns
|
||||
if [ -n "$p" ]; then
|
||||
array_copy pons "LISTOF_${p}__${o}_${l}_vars"
|
||||
array_copy pgns "LISTOF_${p}__${l}_vars"
|
||||
fi
|
||||
array_copy ons "LISTOF_${o}_${l}_vars"
|
||||
array_copy gns "LISTOF_${l}_vars"
|
||||
if array_contains pons "$n"; then
|
||||
array_copy vs "${p}__${o}_${l}_${n}"
|
||||
elif array_contains pgns "$n"; then
|
||||
array_copy vs "${p}__${l}_${n}"
|
||||
elif array_contains ons "$n"; then
|
||||
array_copy vs "${o}_${l}_${n}"
|
||||
else
|
||||
array_copy vs "${l}_${n}"
|
||||
fi
|
||||
fi
|
||||
array_upvar "$d" "${vs[@]}"
|
||||
}
|
||||
|
||||
function deploy_dump_values() {
|
||||
local -a __dv_vs; array_copy __dv_vs "$2"; local -a vs; array_copy vs __dv_vs
|
||||
local n="$1" indent="$3"
|
||||
case ${#vs[*]} in
|
||||
0) echo "$indent$n=";;
|
||||
1) echo "$indent$n=$(qvalr "$vs")";;
|
||||
*) echo "$indent$n=($(qvals "${vs[@]}"))";;
|
||||
esac
|
||||
}
|
|
@ -15,11 +15,11 @@ function ipcalc_splitipmask() {
|
|||
# la variable $2(=ip) et le masque, qui est placée dans la variable
|
||||
# $3(=mask)
|
||||
if [[ "$1" == */* ]]; then
|
||||
set_var "${2:-ip}" "${1%%/*}"
|
||||
set_var "${3:-mask}" "${1#*/}"
|
||||
_setv "${2:-ip}" "${1%%/*}"
|
||||
_setv "${3:-mask}" "${1#*/}"
|
||||
else
|
||||
set_var "${2:-ip}" "$1"
|
||||
set_var "${3:-mask}"
|
||||
_setv "${2:-ip}" "$1"
|
||||
_setv "${3:-mask}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -241,7 +241,7 @@ function network_parse_confbr() {
|
|||
local __npc_destbr; local -a __npc_destifaces
|
||||
__network_parse_confbr "$1"
|
||||
|
||||
set_var "${2:-br}" "$__npc_destbr"
|
||||
_setv "${2:-br}" "$__npc_destbr"
|
||||
array_copy "${3:-ifaces}" __npc_destifaces
|
||||
}
|
||||
|
||||
|
@ -265,8 +265,8 @@ function network_parse_confip() {
|
|||
local __npc_destiface __npc_destgateway; local -a __npc_destipsuffixes
|
||||
__network_parse_confip "$1"
|
||||
|
||||
set_var "${2:-iface}" "$__npc_destiface"
|
||||
set_var "${3:-gateway}" "$__npc_destgateway"
|
||||
_setv "${2:-iface}" "$__npc_destiface"
|
||||
_setv "${3:-gateway}" "$__npc_destgateway"
|
||||
array_copy "${4:-ipsuffixes}" __npc_destipsuffixes
|
||||
}
|
||||
|
||||
|
@ -339,7 +339,7 @@ function __network_fix_confips() {
|
|||
eval "local ${iface}_gateway $network; local -a ${iface}_ipsuffixes"
|
||||
fi
|
||||
if [ -z "${!network}" -a -n "${ipsuffixes[0]}" ]; then
|
||||
setv "$network" "$(ipcalc_network "${ipsuffixes[0]}")"
|
||||
_setv "$network" "$(ipcalc_network "${ipsuffixes[0]}")"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
@ -390,7 +390,7 @@ function __network_fix_confips() {
|
|||
# spécifier la passerelle: elle sera fournie par le serveur DHCP.
|
||||
# Utiliser le marqueur "none" pour que la valeur ne soit pas modifiée.
|
||||
[ "${ipsuffixes[0]}" == "dhcp" ] && gateway=none
|
||||
set_var "${iface}_gateway" "$gateway"
|
||||
_setv "${iface}_gateway" "$gateway"
|
||||
done
|
||||
# puis construire le tableau final
|
||||
array_new confips
|
||||
|
|
|
@ -44,9 +44,9 @@ function read_property() {
|
|||
__rp_name="${2//./_}"
|
||||
fi
|
||||
if [ -n "$__rp_found" ]; then
|
||||
set_var "$__rp_name" "$(tooenc "$__rp_value" "$LATIN1")"
|
||||
_setv "$__rp_name" "$(tooenc "$__rp_value" "$LATIN1")"
|
||||
else
|
||||
set_var "$__rp_name" "$4"
|
||||
_setv "$__rp_name" "$4"
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
@ -77,33 +77,33 @@ function split_ldapuri() {
|
|||
local ldapuri="$1" protoname="${2:-proto}" hostname="${3:-host}" portname="${4:-port}"
|
||||
local tmp
|
||||
if [ -z "$ldapuri" ]; then
|
||||
set_var "$protoname" ""
|
||||
set_var "$hostname" ""
|
||||
set_var "$portname" ""
|
||||
_setv "$protoname" ""
|
||||
_setv "$hostname" ""
|
||||
_setv "$portname" ""
|
||||
return 0
|
||||
fi
|
||||
tmp="$ldapuri"
|
||||
if [ "${tmp#ldap://}" != "$tmp" ]; then
|
||||
set_var "$protoname" ldap
|
||||
_setv "$protoname" ldap
|
||||
tmp="${tmp#ldap://}"
|
||||
elif [ "${tmp#ldaps://}" != "$tmp" ]; then
|
||||
set_var "$protoname" ldaps
|
||||
_setv "$protoname" ldaps
|
||||
tmp="${tmp#ldaps://}"
|
||||
elif [ "${tmp#ldapi://}" != "$tmp" ]; then
|
||||
set_var "$protoname" ldapi
|
||||
_setv "$protoname" ldapi
|
||||
tmp="${tmp#ldapi://}"
|
||||
else
|
||||
set_var "$protoname" ""
|
||||
set_var "$hostname" ""
|
||||
set_var "$portname" ""
|
||||
_setv "$protoname" ""
|
||||
_setv "$hostname" ""
|
||||
_setv "$portname" ""
|
||||
eerror "invalid ldapuri: $ldapuri"
|
||||
return 1
|
||||
fi
|
||||
tmp="${tmp%%/*}"
|
||||
local tmphost="${tmp%%:*}"
|
||||
set_var "$hostname" "$tmphost"
|
||||
_setv "$hostname" "$tmphost"
|
||||
tmp="${tmp#$tmphost}"
|
||||
set_var "$portname" "${tmp#:}"
|
||||
_setv "$portname" "${tmp#:}"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
@ -422,7 +422,7 @@ BEGIN {
|
|||
let i=0
|
||||
for value in "$@"; do
|
||||
script="$script
|
||||
values[$i] = $(quoted_awk "$value")"
|
||||
values[$i] = $(qawk "$value")"
|
||||
let i=$i+1
|
||||
done
|
||||
script="$script
|
||||
|
@ -450,13 +450,13 @@ function print_values() {
|
|||
}
|
||||
BEGIN {
|
||||
add=0
|
||||
attr=fix_attr($(quoted_awk "$attr"))
|
||||
attr=fix_attr($(qawk "$attr"))
|
||||
count=$#"
|
||||
local i value
|
||||
let i=0
|
||||
for value in "$@"; do
|
||||
script="$script
|
||||
values[$i] = $(quoted_awk "$value")"
|
||||
values[$i] = $(qawk "$value")"
|
||||
let i=$i+1
|
||||
done
|
||||
script="$script
|
||||
|
@ -505,13 +505,13 @@ function print_values() {
|
|||
BEGIN {
|
||||
add = 0
|
||||
found = 0
|
||||
attr = fix_attr($(quoted_awk "$attr"))
|
||||
attr = fix_attr($(qawk "$attr"))
|
||||
count = $#"
|
||||
local i value
|
||||
let i=0
|
||||
for value in "$@"; do
|
||||
script="$script
|
||||
values[$i] = $(quoted_awk "$value")"
|
||||
values[$i] = $(qawk "$value")"
|
||||
let i=$i+1
|
||||
done
|
||||
script="$script
|
||||
|
@ -539,13 +539,13 @@ function tl_ensureval() {
|
|||
local script="$(def_match_attr "$attr")
|
||||
BEGIN {
|
||||
resetp()
|
||||
attr = fix_attr($(quoted_awk "$attr"))
|
||||
attr = fix_attr($(qawk "$attr"))
|
||||
ensure_count = $#"
|
||||
local i value
|
||||
let i=0
|
||||
for value in "$@"; do
|
||||
script="$script
|
||||
ensure_values[$i] = $(quoted_awk "$value")"
|
||||
ensure_values[$i] = $(qawk "$value")"
|
||||
let i=$i+1
|
||||
done
|
||||
script="$script
|
||||
|
@ -1330,7 +1330,7 @@ function get_transform_cmd() {
|
|||
shift
|
||||
continue
|
||||
fi
|
||||
cmd="${cmd:+"$cmd "}$(quoted_arg "$1")"
|
||||
cmd="${cmd:+"$cmd "}$(qvalm "$1")"
|
||||
shift
|
||||
done
|
||||
[ -n "$cmd" ] && cmds=("${cmds[@]}" "$cmd")
|
||||
|
@ -1427,7 +1427,7 @@ function get_transform_cmd() {
|
|||
;;
|
||||
esac
|
||||
[ -n "$auto_uncut" ] && dest="${dest:+"$dest | "}"'uncut_lines'
|
||||
dest="${dest:+"$dest | "}$(quoted_args "${cmdparts[@]}")"
|
||||
dest="${dest:+"$dest | "}$(qvals "${cmdparts[@]}")"
|
||||
[ -n "$xempty" ] && dest="${dest:+"$dest | "}"'ensure_complete_objects'
|
||||
[ -n "$xdel" ] && dest="${dest:+"$dest | "}"'delete_marked_objects'
|
||||
first=
|
||||
|
|
|
@ -45,7 +45,7 @@ function file_get_vars() {
|
|||
while [ -n "$1" ]; do
|
||||
var_="$1"; shift
|
||||
vars_="${vars_:+$vars_ }$var_"
|
||||
set_var "$var_" "$1"; shift
|
||||
_setv "$var_" "$1"; shift
|
||||
done
|
||||
|
||||
# puis parcourir le fichier pour initialiser la valeur définitive des
|
||||
|
@ -258,13 +258,13 @@ function file_get_java_properties() {
|
|||
awkre_var_="${var_//./\\.}" # nom de la variable pour une expression régulière awk
|
||||
|
||||
# initialiser la valeur par défaut
|
||||
set_var "$sh_var_" "$1"; shift
|
||||
_setv "$sh_var_" "$1"; shift
|
||||
|
||||
# et créer le script qui affichera sa valeur
|
||||
script="$script"'
|
||||
$0 ~ "^[ \t]*'"$(quote_awk "$awkre_var_")"'=" {
|
||||
$0 ~ "^[ \t]*'"$(_qawk "$awkre_var_")"'=" {
|
||||
# enlever les caractères de début
|
||||
sub("^[ \t]*'"$(quote_awk "$awkre_var_")"'=", "")
|
||||
sub("^[ \t]*'"$(_qawk "$awkre_var_")"'=", "")
|
||||
value = $0
|
||||
# éventuellement ajouter les lignes de continuation
|
||||
while (substr(value, length(value), 1) == "\\") {
|
||||
|
@ -439,7 +439,7 @@ function file_get_xml_properties() {
|
|||
awkre_var_="${var_//./\\.}" # nom de la variable pour une expression régulière awk
|
||||
|
||||
# initialiser la valeur par défaut
|
||||
set_var "$sh_var_" "$1"; shift
|
||||
_setv "$sh_var_" "$1"; shift
|
||||
|
||||
# et créer le script qui affichera sa valeur
|
||||
script="$script"'
|
||||
|
|
|
@ -9,6 +9,10 @@ urequire base
|
|||
# Configuration
|
||||
|
||||
function __runs_initt() {
|
||||
# Ne pas oublier de mettre à jour templates/runsconfig si les modèles de
|
||||
# cette fonction sont modifiés. XXX utiliser le module template pour
|
||||
# utiliser le contenu du template sur le système de fichiers au lieu de
|
||||
# dupliquer l'information.
|
||||
if is_yes "$verbose"; then
|
||||
rscriptt="# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
desc \"CHANGEME: Description du script $rscriptname\"
|
||||
|
@ -50,7 +54,11 @@ $sysinfos_data"
|
|||
# Ce fichier contient la liste des script à lancer avec le compte root pour
|
||||
# configurer $host
|
||||
# Chaque ligne contient le nom du script suivi des arguments éventuels
|
||||
#generic-base
|
||||
#---Ne garder que la ligne correspondant au type d'hôte. ur=1 pour les hôtes de l'université
|
||||
#jessie-base ur=1
|
||||
#ol6-base ur=1
|
||||
#ol7-base ur=1
|
||||
#---
|
||||
#@services
|
||||
#@config"
|
||||
configt="# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
@ -902,7 +910,7 @@ function runs_initworkdir() {
|
|||
cp "$RUNSSRCDIR/uinst" "$RUNSEXPORTDIR"
|
||||
|
||||
# faire les scripts
|
||||
args_def="args=($(quoted_args ./runs --runsscriptspath "$RUNSSCRIPTSPATH" --runsmodulespath "$RUNSMODULESPATH" --runshostspath "$RUNSHOSTSPATH" --runsexportdir . --runsvarsfile varsfile -h "$RUNSHOST" ${RUNSRESET:+-z}))"
|
||||
args_def="args=($(qvals ./runs --runsscriptspath "$RUNSSCRIPTSPATH" --runsmodulespath "$RUNSMODULESPATH" --runshostspath "$RUNSHOSTSPATH" --runsexportdir . --runsvarsfile varsfile -h "$RUNSHOST" ${RUNSRESET:+-z}))"
|
||||
echo '#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
cd "$(dirname "$0")"
|
||||
|
@ -931,7 +939,7 @@ exit 0
|
|||
array_from_path runsdirs "${!runspath}"
|
||||
array_map runsdirs abspath
|
||||
array_map runsdirs __runs_add_runsroot
|
||||
set_var "$runspath" "$(array_join runsdirs :)"
|
||||
_setv "$runspath" "$(array_join runsdirs :)"
|
||||
done
|
||||
# XXX quelles autres variables doivent être corrigées?
|
||||
# XXX ==> il faut rajouter rscripts et recipes
|
||||
|
@ -987,11 +995,11 @@ function __runs_check_notref() {
|
|||
}
|
||||
function __runs_splitref() {
|
||||
if [[ "$1" == *=* ]]; then
|
||||
set_var "${2:-__name}" "${1%%=*}"
|
||||
set_var "${3:-__value}" "${1#*=}"
|
||||
_setv "${2:-__name}" "${1%%=*}"
|
||||
_setv "${3:-__value}" "${1#*=}"
|
||||
else
|
||||
set_var "${2:-__name}" "$1"
|
||||
set_var "${3:-__value}" "$1"
|
||||
_setv "${2:-__name}" "$1"
|
||||
_setv "${3:-__value}" "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -1038,7 +1046,7 @@ function runs_var() {
|
|||
array_set RUNSVARS "$__name"
|
||||
array_del RUNSARRAYS "$__name"
|
||||
array_set RUNSVARSINDIRECT "$__name"
|
||||
set_var "$__name" "$__value"
|
||||
_setv "$__name" "$__value"
|
||||
fi
|
||||
elif [[ "$1" == *@=* ]]; then
|
||||
__name="${1%%@=*}"
|
||||
|
@ -1047,7 +1055,7 @@ function runs_var() {
|
|||
array_set RUNSVARS "$__name"
|
||||
array_set RUNSARRAYS "$__name"
|
||||
array_set RUNSVARSINDIRECT "$__name"
|
||||
set_var "$__name" "$__value"
|
||||
_setv "$__name" "$__value"
|
||||
fi
|
||||
elif [[ "$1" == *=* ]]; then
|
||||
__name="${1%%=*}"
|
||||
|
@ -1056,12 +1064,12 @@ function runs_var() {
|
|||
array_set RUNSVARS "$__name"
|
||||
array_del RUNSARRAYS "$__name"
|
||||
array_del RUNSVARSINDIRECT "$__name"
|
||||
set_var "$__name" "$__value"
|
||||
_setv "$__name" "$__value"
|
||||
fi
|
||||
else
|
||||
break
|
||||
fi
|
||||
[ -n "$RUNSVARDESC" ] && set_var "RUNSVARDESC_$__name" "$RUNSVARDESC"
|
||||
[ -n "$RUNSVARDESC" ] && _setv "RUNSVARDESC_$__name" "$RUNSVARDESC"
|
||||
shift
|
||||
done
|
||||
# variables tableau
|
||||
|
@ -1141,12 +1149,12 @@ function runs_set_lang() {
|
|||
if check_sysinfos -d debianlike; then
|
||||
eval "$(LANG=
|
||||
source_ifexists /etc/default/locale
|
||||
set_var_cmd LANG "$LANG"
|
||||
echo_setv LANG "$LANG"
|
||||
)"
|
||||
elif check_sysinfos -d redhatlike; then
|
||||
eval "$(LANG=
|
||||
source_ifexists /etc/locale.conf
|
||||
set_var_cmd LANG "$LANG"
|
||||
echo_setv LANG "$LANG"
|
||||
)"
|
||||
fi
|
||||
export LANG
|
||||
|
@ -1160,9 +1168,9 @@ function runs_set_proxy() {
|
|||
if check_sysinfos -d debianlike; then
|
||||
eval "$(http_proxy=; ftp_proxy=; no_proxy=
|
||||
source_ifexists /etc/environment
|
||||
set_var_cmd http_proxy "$http_proxy"
|
||||
set_var_cmd ftp_proxy "$ftp_proxy"
|
||||
set_var_cmd no_proxy "$no_proxy"
|
||||
echo_setv http_proxy "$http_proxy"
|
||||
echo_setv ftp_proxy "$ftp_proxy"
|
||||
echo_setv no_proxy "$no_proxy"
|
||||
)"
|
||||
fi
|
||||
export http_proxy ftp_proxy no_proxy
|
||||
|
@ -1215,7 +1223,7 @@ function runs_after() {
|
|||
if array_contains RUNSARRAYS "$__var"; then
|
||||
eval "array_copy __tmp $__var; local -a $__var; array_copy $__var __tmp"
|
||||
else
|
||||
eval "set_var __tmp \"\${!__var}\"; local $__var; $__var=\"\$__tmp\""
|
||||
eval "_setv __tmp \"\${!__var}\"; local $__var; $__var=\"\$__tmp\""
|
||||
fi
|
||||
done
|
||||
runs_clvars "${RUNSCLVARS[@]}"
|
||||
|
@ -1229,7 +1237,7 @@ function runs_after() {
|
|||
if [[ "$__arg" == *!=* ]]; then
|
||||
__name="${__arg%%!=*}"
|
||||
__value="${__arg#*!=}"
|
||||
__args=("${__args[@]}" "$__name=$(quoted_arg "${!__value}")")
|
||||
__args=("${__args[@]}" "$__name=$(qvalm "${!__value}")")
|
||||
elif [[ "$__arg" == *@=* ]]; then
|
||||
__name="${__arg%%@=*}"
|
||||
__value="${__arg#*@=}[@]"
|
||||
|
@ -1293,7 +1301,7 @@ function runs_indvars() {
|
|||
else
|
||||
# variable scalaire
|
||||
__ind="${!__var}"
|
||||
set_var "$__var" "${!__ind}"
|
||||
_setv "$__var" "${!__ind}"
|
||||
fi
|
||||
done
|
||||
RUNSVARSINDIRECT=()
|
||||
|
@ -1306,7 +1314,7 @@ function runs_clvars_cmd() {
|
|||
__vars=()
|
||||
while [ -n "$1" ]; do
|
||||
if [ "$1" == ";" ]; then
|
||||
echo "$__prefix$(quoted_args "${__vars[@]}")"
|
||||
echo "$__prefix$(qvals "${__vars[@]}")"
|
||||
__vars=()
|
||||
__prefix=" "
|
||||
else
|
||||
|
@ -1314,7 +1322,7 @@ function runs_clvars_cmd() {
|
|||
fi
|
||||
shift
|
||||
done
|
||||
[ -n "${__vars[*]}" ] && echo "$__prefix$(quoted_args "${__vars[@]}")"
|
||||
[ -n "${__vars[*]}" ] && echo "$__prefix$(qvals "${__vars[@]}")"
|
||||
}
|
||||
|
||||
function runs_loadconfs() {
|
||||
|
@ -1450,10 +1458,10 @@ function runs_action_dump() {
|
|||
eval "__count=\"\${#$__var[@]}\""
|
||||
if [ "$__count" -eq 1 ]; then
|
||||
# variable scalaire
|
||||
eecho "$__var=$(quoted_args "${!__values}")"
|
||||
eecho "$__var=$(qvals "${!__values}")"
|
||||
else
|
||||
# variable tableau
|
||||
eecho "$__var=($(quoted_args "${!__values}"))"
|
||||
eecho "$__var=($(qvals "${!__values}"))"
|
||||
fi
|
||||
done
|
||||
exit 0
|
||||
|
@ -1527,7 +1535,7 @@ function runs_action_run() {
|
|||
# configuration dans le fichier $__shellconf
|
||||
|
||||
__runs_check_varname "$__refvarname" || die
|
||||
set_var "$__refvarname" ""
|
||||
_setv "$__refvarname" ""
|
||||
|
||||
splitwcs "$__shellconf" __tmpconf __wildconf
|
||||
if [ -n "$__wildconf" ]; then
|
||||
|
@ -1630,7 +1638,7 @@ function runs_action_run() {
|
|||
runs_indvars
|
||||
for __name in "${RUNSVARS[@]}"; do
|
||||
__value="$(array_join "$__name" ":")"
|
||||
__vars=("${__vars[@]}" "$(set_var_cmd "$__name" "$__value")")
|
||||
__vars=("${__vars[@]}" "$(echo_setv "$__name" "$__value")")
|
||||
done
|
||||
|
||||
if [ -n "$RUNS_REMOTE_SET_Y" ]; then
|
||||
|
@ -1716,7 +1724,7 @@ function runs_action_export() {
|
|||
# configuration dans le fichier $__shellconf
|
||||
|
||||
__runs_check_varname "$__refvarname" || die
|
||||
set_var "$__refvarname" ""
|
||||
_setv "$__refvarname" ""
|
||||
|
||||
splitwcs "$__shellconf" __tmpconf __wildconf
|
||||
if [ -n "$__wildconf" ]; then
|
||||
|
@ -1826,7 +1834,7 @@ function runs_action_export() {
|
|||
for __shellvar in "${__shellvars[@]}"; do
|
||||
# s'assurer que la variables sont vides
|
||||
# avant de sourcer $__shellconf
|
||||
set_var "$__shellvar"
|
||||
_setv "$__shellvar"
|
||||
done
|
||||
source "$__shellconf"
|
||||
for __shellvar in "${__shellvars[@]}"; do
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -270,8 +270,8 @@ function __fix_sysinfos_upward() {
|
|||
array_copy sysvers_ "${sysdist_}_SYSVERS"
|
||||
for sysver_ in "${sysvers_[@]}"; do
|
||||
if [ "$sysver_" == "${!sysvervar_}" ]; then
|
||||
set_var "$sysdistvar_" "$sysdist_"
|
||||
set_var "$sysnamevar_" "$sysname_"
|
||||
_setv "$sysdistvar_" "$sysdist_"
|
||||
_setv "$sysnamevar_" "$sysname_"
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
@ -284,7 +284,7 @@ function __fix_sysinfos_upward() {
|
|||
array_copy sysdists_ "${sysname_}_SYSDISTS"
|
||||
for sysdist_ in "${sysdists_[@]}"; do
|
||||
if [ "$sysdist_" == "${!sysdistvar_}" ]; then
|
||||
set_var "$sysnamevar_" "$sysname_"
|
||||
_setv "$sysnamevar_" "$sysname_"
|
||||
return
|
||||
fi
|
||||
done
|
||||
|
@ -301,7 +301,7 @@ function __fix_sysinfos_downward() {
|
|||
# essayer de déterminer !sysdistvar_ à partir de !sysnamevar_
|
||||
array_copy sysdists_ "${!sysnamevar_}_SYSDISTS"
|
||||
for sysdist_ in "${sysdists_[@]}"; do
|
||||
set_var "$sysdistvar_" "$sysdist_"
|
||||
_setv "$sysdistvar_" "$sysdist_"
|
||||
break
|
||||
done
|
||||
fi
|
||||
|
@ -311,7 +311,7 @@ function __fix_sysinfos_downward() {
|
|||
# essayer de déterminer !sysvervar_ à partir de !sysdistvar_
|
||||
array_copy sysvers_ "${sysdistvar_}_SYSVERS"
|
||||
for sysver_ in "${sysvers_[@]}"; do
|
||||
set_var "$sysvervar_" "$sysver_"
|
||||
_setv "$sysvervar_" "$sysver_"
|
||||
break
|
||||
done
|
||||
fi
|
||||
|
@ -325,8 +325,8 @@ function ensure_sysinfos() {
|
|||
local sysnamevar_="${1:-SYSNAME}"
|
||||
local sysdistvar_="${2:-SYSDIST}"
|
||||
local sysvervar_="${3:-SYSVER}"
|
||||
[ -n "${!sysdistvar_}" ] && set_var "$sysdistvar_" "$(__get_sysdist_alias "${!sysdistvar_}")"
|
||||
[ -n "${!sysvervar_}" ] && set_var "$sysvervar_" "$(__get_sysver_alias "${!sysvervar_}")"
|
||||
[ -n "${!sysdistvar_}" ] && _setv "$sysdistvar_" "$(__get_sysdist_alias "${!sysdistvar_}")"
|
||||
[ -n "${!sysvervar_}" ] && _setv "$sysvervar_" "$(__get_sysver_alias "${!sysvervar_}")"
|
||||
__fix_sysinfos_upward
|
||||
__fix_sysinfos_downward
|
||||
}
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
# Ce fichier contient la liste des script à lancer avec le compte root pour
|
||||
# configurer @@host@@
|
||||
# Chaque ligne contient le nom du script suivi des arguments éventuels
|
||||
#generic-base
|
||||
#---Ne garder que la ligne correspondant au type d'hôte. ur=1 pour les hôtes de l'université
|
||||
#jessie-base ur=1
|
||||
#ol6-base ur=1
|
||||
#ol7-base ur=1
|
||||
#---
|
||||
#@services
|
||||
#@config
|
||||
|
|
|
@ -35,8 +35,8 @@ function udir_dump() {
|
|||
local udirf="$(abspath "${1:-.}")"
|
||||
[ -d "$udirf" ] && udirf="$udirf/.udir"
|
||||
if [ -f "$udirf" ]; then
|
||||
set_var_cmd udir "$(dirname "$udirf")"
|
||||
set_var_cmd udirf "$udirf"
|
||||
echo_setv udir "$(dirname "$udirf")"
|
||||
echo_setv udirf "$udirf"
|
||||
<"$udirf" filter_comment -m
|
||||
fi
|
||||
}
|
||||
|
@ -140,11 +140,11 @@ function udir_update() {
|
|||
for param in "$@"; do
|
||||
name="${param%%=*}"
|
||||
script="$script
|
||||
names[$i] = $(quoted_awk "$name")"
|
||||
names[$i] = $(qawk "$name")"
|
||||
if [ "$name" != "$param" ]; then
|
||||
value="${param#*=}"
|
||||
script="$script
|
||||
values[$i] = $(quoted_awk "$value")"
|
||||
values[$i] = $(qawk "$value")"
|
||||
else
|
||||
script="$script
|
||||
values[$i] = \"\""
|
||||
|
|
|
@ -290,7 +290,7 @@ Utilisez 'udir -e $(ppath "$srcdir")' pour modifier les paramètres qui ont ét
|
|||
__uinst_migrate_legacy "$srcdir"
|
||||
__uinst_varcmds=()
|
||||
for __uinst_v in "${UDIR_VARS[@]}"; do
|
||||
__uinst_varcmds=("${__uinst_varcmds[@]}" "$(set_var_cmd "$__uinst_v" "${!__uinst_v}")")
|
||||
__uinst_varcmds=("${__uinst_varcmds[@]}" "$(echo_setv "$__uinst_v" "${!__uinst_v}")")
|
||||
done
|
||||
for __uinst_a in "${UDIR_ARRAYS[@]}"; do
|
||||
__uinst_varcmds=("${__uinst_varcmds[@]}" "$(set_array_cmd "$__uinst_a")")
|
||||
|
@ -310,7 +310,7 @@ Utilisez 'udir -e $(ppath "$srcdir")' pour modifier les paramètres qui ont ét
|
|||
local udir_desc udir_note udir_types
|
||||
local profiles conf rootconf ulibsync copy_files
|
||||
|
||||
eval "$(udir_eval "$srcdir" 'set_var_cmd udir_desc "$udir_desc"; set_var_cmd udir_note "$udir_note"')"
|
||||
eval "$(udir_eval "$srcdir" 'echo_setv udir_desc "$udir_desc"; echo_setv udir_note "$udir_note"')"
|
||||
|
||||
etitle "Description du projet"
|
||||
check_interaction -c && estepn "La description courte de l'objet de ce projet est affichée avec udir -i"
|
||||
|
@ -319,7 +319,7 @@ Utilisez 'udir -e $(ppath "$srcdir")' pour modifier les paramètres qui ont ét
|
|||
Elle peut être utilisée pour diriger le visiteur vers des informations importantes."
|
||||
read_value "Entrez une note associée au répertoire de ce projet" udir_note "$udir_note" N
|
||||
eend
|
||||
udir_update "$srcdir" "udir_desc=$(quoted_arg "$udir_desc")" "udir_note=$(quoted_arg "$udir_note")"
|
||||
udir_update "$srcdir" "udir_desc=$(qval "$udir_desc")" "udir_note=$(qval "$udir_note")"
|
||||
|
||||
estepn "La configuration par défaut permet de créer un projet qui utilise les outils et librairies de nutools.
|
||||
Ce projet pourra ensuite être installé avec uinst"
|
||||
|
@ -351,7 +351,7 @@ Ce projet pourra ensuite être installé avec uinst"
|
|||
mkdirof "$genfile"
|
||||
[ -f "$genfile" ] || echo '# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
__uaddpath "@@dest@@" PATH' >"$genfile"
|
||||
udir_update "$srcdir" "configure_dest_for=($(quoted_arg "${genfile#"$srcdir/"}"))"
|
||||
udir_update "$srcdir" "configure_dest_for=($(qvalm "${genfile#"$srcdir/"}"))"
|
||||
fi
|
||||
if [ -n "$conf" ]; then
|
||||
genfile="$srcdir/lib/uinst/conf"
|
||||
|
@ -525,12 +525,12 @@ function __uinst_addvarnf() {
|
|||
eerror "La variable $1 est protégée"
|
||||
return 1
|
||||
else
|
||||
array_add UINST_CONFIG_VARCMDS "$(set_var_cmd "$1" "$2")"
|
||||
set_var "$1" "$2"
|
||||
array_add UINST_CONFIG_VARCMDS "$(echo_setv "$1" "$2")"
|
||||
_setv "$1" "$2"
|
||||
if [ "$1" == "MYHOST" ]; then
|
||||
# cas particulier: initialiser aussi MYHOSTNAME
|
||||
set_var "MYHOSTNAME" "${2%%.*}"
|
||||
array_add UINST_CONFIG_VARCMDS "$(set_var_cmd "MYHOSTNAME" "$MYHOSTNAME")"
|
||||
_setv "MYHOSTNAME" "${2%%.*}"
|
||||
array_add UINST_CONFIG_VARCMDS "$(echo_setv "MYHOSTNAME" "$MYHOSTNAME")"
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
|
@ -683,7 +683,7 @@ function __uinst_prepare_conf() {
|
|||
# prepare_name=$srcdir
|
||||
# srcdir est un chemin relatif à $UINST_PREPARE_DIR (si la source était une
|
||||
# archive, il est possible que ce chemin soit en plusieurs parties
|
||||
set_var_cmd prepare_name "$(relpath "$srcdir" "$UINST_PREPARE_DIR")" >"$UINST_PREPARE_CONF"
|
||||
echo_setv prepare_name "$(relpath "$srcdir" "$UINST_PREPARE_DIR")" >"$UINST_PREPARE_CONF"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
|
@ -796,28 +796,28 @@ function __uinst_udir2s() {
|
|||
__uinst_config="$__uinst_configdir/config"
|
||||
__uinst_abort="$__uinst_configdir/abort"
|
||||
__uinst_updateconfig="$__uinst_configdir/updateconfig"
|
||||
set_var_cmd ABORT "$__uinst_abort" >>"$__uinst_config"
|
||||
set_var_cmd CONFIG "$__uinst_updateconfig" >>"$__uinst_config"
|
||||
set_var_cmd __verbosity "$__verbosity" >>"$__uinst_config"
|
||||
set_var_cmd __interaction "$__interaction" >>"$__uinst_config"
|
||||
echo_setv ABORT "$__uinst_abort" >>"$__uinst_config"
|
||||
echo_setv CONFIG "$__uinst_updateconfig" >>"$__uinst_config"
|
||||
echo_setv __verbosity "$__verbosity" >>"$__uinst_config"
|
||||
echo_setv __interaction "$__interaction" >>"$__uinst_config"
|
||||
for __uinst_var in "${__uinst_vars[@]}"; do
|
||||
set_var_cmd "$__uinst_var" "${!__uinst_var}" >>"$__uinst_config"
|
||||
echo_setv "$__uinst_var" "${!__uinst_var}" >>"$__uinst_config"
|
||||
done
|
||||
for __uinst_var in "${__uinst_arrays[@]}"; do
|
||||
set_array_cmd "$__uinst_var" >>"$__uinst_config"
|
||||
done
|
||||
set_var_cmd "UINST_LOCAL_PROFILES" "$UINST_LOCAL_PROFILES" >>"$__uinst_config"
|
||||
set_var_cmd "UINST_ISTMPDIR" "$UINST_ISTMPDIR" >>"$__uinst_config"
|
||||
set_var_cmd "UINST_ORIGSRC" "$UINST_ORIGSRC" >>"$__uinst_config"
|
||||
set_var_cmd "UINST_SRCDIR" "$UINST_SRCDIR" >>"$__uinst_config"
|
||||
set_var_cmd "ULIBDIR" "$ULIBDIR" >>"$__uinst_config"
|
||||
set_var_cmd "UINST" "$UINST" >>"$__uinst_config"
|
||||
echo_setv "UINST_LOCAL_PROFILES" "$UINST_LOCAL_PROFILES" >>"$__uinst_config"
|
||||
echo_setv "UINST_ISTMPDIR" "$UINST_ISTMPDIR" >>"$__uinst_config"
|
||||
echo_setv "UINST_ORIGSRC" "$UINST_ORIGSRC" >>"$__uinst_config"
|
||||
echo_setv "UINST_SRCDIR" "$UINST_SRCDIR" >>"$__uinst_config"
|
||||
echo_setv "ULIBDIR" "$ULIBDIR" >>"$__uinst_config"
|
||||
echo_setv "UINST" "$UINST" >>"$__uinst_config"
|
||||
# ulib recalcule systématiquement la valeur de ULIBDIR. Pareil pour
|
||||
# pyulib/pyulib. Mais cela ne fonctionne pas si nous déployons sur une
|
||||
# machine avec bash 2.x. Il faut donc forcer l'utilisation de la valeur
|
||||
# calculée.
|
||||
set_var_cmd "FORCED_ULIBDIR" "$ULIBDIR" >>"$__uinst_config"
|
||||
set_var_cmd "FORCED_PYULIBDIR" "$PYULIBDIR" >>"$__uinst_config"
|
||||
echo_setv "FORCED_ULIBDIR" "$ULIBDIR" >>"$__uinst_config"
|
||||
echo_setv "FORCED_PYULIBDIR" "$PYULIBDIR" >>"$__uinst_config"
|
||||
|
||||
## Lancer les scripts de préconfiguration
|
||||
function __uinst_preconfig_scripts() {
|
||||
|
@ -1241,13 +1241,13 @@ function __uinst_python() {
|
|||
local __uinst_config __uinst_var
|
||||
ac_set_tmpfile __uinst_config
|
||||
for __uinst_var in srcdir; do
|
||||
set_var_cmd "$__uinst_var" "${!__uinst_var}" >>"$__uinst_config"
|
||||
echo_setv "$__uinst_var" "${!__uinst_var}" >>"$__uinst_config"
|
||||
done
|
||||
set_var_cmd "UINST_ISTMPDIR" "$UINST_ISTMPDIR" >>"$__uinst_config"
|
||||
set_var_cmd "UINST_ORIGSRC" "$UINST_ORIGSRC" >>"$__uinst_config"
|
||||
set_var_cmd "UINST_SRCDIR" "$UINST_SRCDIR" >>"$__uinst_config"
|
||||
set_var_cmd "ULIBDIR" "$ULIBDIR" >>"$__uinst_config"
|
||||
set_var_cmd "UINST" "$UINST" >>"$__uinst_config"
|
||||
echo_setv "UINST_ISTMPDIR" "$UINST_ISTMPDIR" >>"$__uinst_config"
|
||||
echo_setv "UINST_ORIGSRC" "$UINST_ORIGSRC" >>"$__uinst_config"
|
||||
echo_setv "UINST_SRCDIR" "$UINST_SRCDIR" >>"$__uinst_config"
|
||||
echo_setv "ULIBDIR" "$ULIBDIR" >>"$__uinst_config"
|
||||
echo_setv "UINST" "$UINST" >>"$__uinst_config"
|
||||
runscript_as_root "$uinst2s" "$__uinst_config"
|
||||
}
|
||||
|
||||
|
@ -1354,16 +1354,16 @@ function __uinst_file() {
|
|||
local __uinst_config __uinst_var
|
||||
ac_set_tmpfile __uinst_config
|
||||
for __uinst_var in copy_files destdir srcdir owner modes; do
|
||||
set_var_cmd "$__uinst_var" "${!__uinst_var}" >>"$__uinst_config"
|
||||
echo_setv "$__uinst_var" "${!__uinst_var}" >>"$__uinst_config"
|
||||
done
|
||||
for __uinst_var in files modes; do
|
||||
set_array_cmd "$__uinst_var" >>"$__uinst_config"
|
||||
done
|
||||
set_var_cmd "UINST_ISTMPDIR" "$UINST_ISTMPDIR" >>"$__uinst_config"
|
||||
set_var_cmd "UINST_ORIGSRC" "$UINST_ORIGSRC" >>"$__uinst_config"
|
||||
set_var_cmd "UINST_SRCDIR" "$UINST_SRCDIR" >>"$__uinst_config"
|
||||
set_var_cmd "ULIBDIR" "$ULIBDIR" >>"$__uinst_config"
|
||||
set_var_cmd "UINST" "$UINST" >>"$__uinst_config"
|
||||
echo_setv "UINST_ISTMPDIR" "$UINST_ISTMPDIR" >>"$__uinst_config"
|
||||
echo_setv "UINST_ORIGSRC" "$UINST_ORIGSRC" >>"$__uinst_config"
|
||||
echo_setv "UINST_SRCDIR" "$UINST_SRCDIR" >>"$__uinst_config"
|
||||
echo_setv "ULIBDIR" "$ULIBDIR" >>"$__uinst_config"
|
||||
echo_setv "UINST" "$UINST" >>"$__uinst_config"
|
||||
runscript_as_root "$uinst2s" "$__uinst_config"
|
||||
}
|
||||
|
||||
|
|
|
@ -177,8 +177,8 @@ function read_infofile() {
|
|||
# Retourner 1 si un erreur s'est produite, par exemple si le fichier $1
|
||||
# n'existe pas ou n'est pas accessible en lecture
|
||||
[ -f "$1" -a -r "$1" ] || return 1
|
||||
set_var "${2:-version}" "$(grep -A 1 CFBundleShortVersionString "$1" | tail -1 | sed 's/^.*<string>\(.*\)<\/string>.*$/\1/')"
|
||||
set_var "${3:-release}" "$(grep -A 1 CFBundleVersion "$1" | tail -1 | sed 's/^.*<string>\(.*\)<\/string>.*$/\1/')"
|
||||
_setv "${2:-version}" "$(grep -A 1 CFBundleShortVersionString "$1" | tail -1 | sed 's/^.*<string>\(.*\)<\/string>.*$/\1/')"
|
||||
_setv "${3:-release}" "$(grep -A 1 CFBundleVersion "$1" | tail -1 | sed 's/^.*<string>\(.*\)<\/string>.*$/\1/')"
|
||||
}
|
||||
|
||||
function write_infofile() {
|
||||
|
@ -525,7 +525,7 @@ function woraurl() {
|
|||
5*) _status=3;;
|
||||
*) _status=11;;
|
||||
esac
|
||||
set_var "${4:-http_code}" "$_http_code"
|
||||
_setv "${4:-http_code}" "$_http_code"
|
||||
return $_status
|
||||
}
|
||||
function wogeturl() { woraurl GET "$@"; }
|
||||
|
@ -540,28 +540,28 @@ function splitins() {
|
|||
# Si $1==App, type=app et name=App
|
||||
# si $1==App-N, type=ins et name=App-N
|
||||
if [ -z "$1" ]; then
|
||||
set_var "${2:-type}" all
|
||||
set_var "${3:-name}"
|
||||
_setv "${2:-type}" all
|
||||
_setv "${3:-name}"
|
||||
elif [ "${1%.woa}" != "$1" ]; then
|
||||
set_var "${2:-type}" woa
|
||||
set_var "${3:-name}" "$1"
|
||||
_setv "${2:-type}" woa
|
||||
_setv "${3:-name}" "$1"
|
||||
elif [ "${1%.framework}" != "$1" ]; then
|
||||
set_var "${2:-type}" fwk
|
||||
set_var "${3:-name}" "$1"
|
||||
_setv "${2:-type}" fwk
|
||||
_setv "${3:-name}" "$1"
|
||||
elif [[ "$1" == *-* ]]; then
|
||||
local __si_name __si_num
|
||||
__si_name="${1%-*}"
|
||||
__si_num="${1##*-}"
|
||||
if [ -z "${__si_num//[0-9]/}" ]; then
|
||||
set_var "${2:-type}" ins
|
||||
set_var "${3:-name}" "$1"
|
||||
_setv "${2:-type}" ins
|
||||
_setv "${3:-name}" "$1"
|
||||
else
|
||||
set_var "${2:-type}" app
|
||||
set_var "${3:-name}" "$1"
|
||||
_setv "${2:-type}" app
|
||||
_setv "${3:-name}" "$1"
|
||||
fi
|
||||
elif [ -n "$1" ]; then
|
||||
set_var "${2:-type}" app
|
||||
set_var "${3:-name}" "$1"
|
||||
_setv "${2:-type}" app
|
||||
_setv "${3:-name}" "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ COMMANDES
|
|||
while [ -n "$1" ]; do
|
||||
if [ "$1" == // ]; then
|
||||
if [ -n "${cmd[*]}" ]; then
|
||||
cmds=("${cmds[@]}" "$(quoted_args "${cmd[@]}")")
|
||||
cmds=("${cmds[@]}" "$(qvals "${cmd[@]}")")
|
||||
fi
|
||||
cmd=()
|
||||
else
|
||||
|
@ -111,7 +111,7 @@ COMMANDES
|
|||
shift
|
||||
done
|
||||
if [ -n "${cmd[*]}" ]; then
|
||||
cmds=("${cmds[@]}" "$(quoted_args "${cmd[@]}")")
|
||||
cmds=("${cmds[@]}" "$(qvals "${cmd[@]}")")
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -458,7 +458,7 @@ OPTIONS
|
|||
if [[ "$src" == *=* ]]; then
|
||||
splitvar "$src" name value
|
||||
array_add variables "$name"
|
||||
set_var "$name" "$value"
|
||||
_setv "$name" "$value"
|
||||
else
|
||||
src="$(abspath "$src")"
|
||||
valid=
|
||||
|
@ -543,14 +543,14 @@ dans NEXT_ROOT = ${NEXT_ROOT:-/}
|
|||
local configfile variable
|
||||
ac_set_tmpfile configfile
|
||||
for variable in "${variables[@]}" bounce webinst ULIBDIR __estack __tlevel; do
|
||||
set_var_cmd "$variable" "${!variable}" >>"$configfile"
|
||||
echo_setv "$variable" "${!variable}" >>"$configfile"
|
||||
done
|
||||
for array in variables scripts applications frameworks; do
|
||||
set_array_cmd "$array" >>"$configfile"
|
||||
done
|
||||
# pour les serveurs qui ont une vieille version de bash, forcer la valeur de
|
||||
# ULIBDIR
|
||||
set_var_cmd "FORCED_ULIBDIR" "$ULIBDIR" >>"$configfile"
|
||||
echo_setv "FORCED_ULIBDIR" "$ULIBDIR" >>"$configfile"
|
||||
|
||||
runscript_as_root "$ULIBDIR/support/woinst2s" "$configfile"
|
||||
|
||||
|
|
|
@ -18,9 +18,9 @@ function wosign_setup_maybe() {
|
|||
storepass=
|
||||
keyalias=
|
||||
source "$WOSIGN_CONF"
|
||||
set_var_cmd WOSIGN_KEYSTORE "$keystore"
|
||||
set_var_cmd WOSIGN_STOREPASS "$storepass"
|
||||
set_var_cmd WOSIGN_KEYALIAS "$keyalias"
|
||||
echo_setv WOSIGN_KEYSTORE "$keystore"
|
||||
echo_setv WOSIGN_STOREPASS "$storepass"
|
||||
echo_setv WOSIGN_KEYALIAS "$keyalias"
|
||||
)"
|
||||
|
||||
[ -n "$WOSIGN_XTMPDIR" ] || ac_set_tmpdir WOSIGN_XTMPDIR
|
||||
|
|
2
mysqlcsv
2
mysqlcsv
|
@ -132,7 +132,7 @@ if [ "$password" != "--NOT-SET--" ]; then
|
|||
fi
|
||||
|
||||
if [ -z "$query" -a -n "$input" -a "$input" != "-" ]; then
|
||||
mysqlcmd="<$(quoted_arg "$input") $mysqlcmd"
|
||||
mysqlcmd="<$(qval "$input") $mysqlcmd"
|
||||
fi
|
||||
|
||||
eval "$mysqlcmd" |
|
||||
|
|
|
@ -340,7 +340,7 @@ if [ "$method" == load ]; then
|
|||
[ -n "$truncate" ] && echo "$truncate"
|
||||
echo "$loadcsv"
|
||||
echo "-- Commande à lancer pour importer la table dans MySQL:"
|
||||
echo "-- $(quoted_args "${cmd[@]}")"
|
||||
echo "-- $(qvals "${cmd[@]}")"
|
||||
else
|
||||
"${cmd[@]}"; r=$?
|
||||
fi
|
||||
|
|
2
pdev
2
pdev
|
@ -298,7 +298,7 @@ if [ "$action" == delete ]; then
|
|||
eimportant "\
|
||||
La branche $origin/$feature n'a plus lieu d'être, mais la configuration actuelle interdit de la supprimer.
|
||||
Veuillez le faire manuellement avec la commande suivante:
|
||||
$(quoted_args git push "$origin" ":$feature")"
|
||||
$(qvals git push "$origin" ":$feature")"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
|
6
rruns
6
rruns
|
@ -419,11 +419,11 @@ for userhost in "${hosts[@]}"; do
|
|||
if scp -S "$SSH" "$archive" "$user@$host:"; then
|
||||
estep "Lancement du script de déploiement"
|
||||
"$SSH" -qt "$user@$host" "\
|
||||
__estack=$(quoted_arg "$__estack")
|
||||
__tlevel=$(quoted_arg "$__tlevel")
|
||||
__estack=$(qval "$__estack")
|
||||
__tlevel=$(qval "$__tlevel")
|
||||
export __estack __tlevel
|
||||
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
|
||||
}$(quoted_args "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
|
||||
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"})"
|
||||
if [ -n "$init_sysinfos" ]; then
|
||||
estep "Calcul des informations de l'hôte distant"
|
||||
sysinfos_script='
|
||||
|
|
62
ruinst
62
ruinst
|
@ -14,7 +14,9 @@ pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces
|
|||
caractères n'est pas garanti.
|
||||
|
||||
OPTIONS
|
||||
-C Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||
-C, --configure-user
|
||||
--configure USER [--uses-su]
|
||||
Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||
sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir
|
||||
se connecter par mot de passe pour configurer la connexion par clé.
|
||||
Si l'on veut configurer la connexion par clé pour le user root, mais que
|
||||
|
@ -26,14 +28,14 @@ OPTIONS
|
|||
Si l'hôte distant n'a pas sudo ou si sudo n'est pas configuré, il faut
|
||||
rajouter l'option --uses-su, e.g:
|
||||
$scriptname -h user@host --configure root --uses-su
|
||||
-T tmproot
|
||||
-T, --tmproot TMPROOT
|
||||
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
|
||||
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut
|
||||
un /tmp minuscule de 16 Mo.
|
||||
-S, --ssh ssh
|
||||
-S, --ssh SSH
|
||||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
-h hosts
|
||||
-h @hostsfile
|
||||
-h, --host hosts
|
||||
-h, --host @hostsfile
|
||||
Spécifier un ou plusieurs hôtes sur lequels faire le déploiement. Pour
|
||||
spécifier plusieurs hôtes, il est possible d'utiliser plusieurs fois
|
||||
l'option -h, ou spécifier en une seule fois plusieurs hôtes en les
|
||||
|
@ -45,7 +47,17 @@ OPTIONS
|
|||
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||
user@host, e.g -h user@host
|
||||
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
|
||||
hostsfile, à raison d'un hôte par ligne."
|
||||
hostsfile, à raison d'un hôte par ligne.
|
||||
--deploy
|
||||
--no-deploy
|
||||
Autoriser (respectivement interdire) l'utilisation de la configuration
|
||||
locale de déploiement pour identifier la destination si aucun hôte n'est
|
||||
spécifié.
|
||||
Par défaut, si aucun hôte n'est spécifié, la configuration locale de
|
||||
déploiement est interrogée pour avoir cette information.
|
||||
-c, --deploy-config CONFNAME
|
||||
Cette option permet de spécifier le nom de la configuration à utiliser
|
||||
pour effectuer la requête. Par défaut, utiliser le nom 'ruinst'"
|
||||
}
|
||||
|
||||
set_defaults pubkeys
|
||||
|
@ -54,18 +66,23 @@ action=deploy
|
|||
confuser=
|
||||
uses_su=
|
||||
tmproot=
|
||||
hosts=()
|
||||
SSH=
|
||||
force_make_archive=
|
||||
hosts=()
|
||||
deploy_enable=1
|
||||
deploy_confname=ruinst
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
-C action=configure \
|
||||
-C,--configure-user action=configure \
|
||||
--configure: '$set@ confuser;action=configure' \
|
||||
--uses-su uses_su=1 \
|
||||
-T:,--tmproot: tmproot= \
|
||||
-S:,--ssh: SSH= \
|
||||
--force-make-archive force_make_archive=1 \
|
||||
-h:,-H:,--host: hosts \
|
||||
--deploy deploy_enable=1 \
|
||||
--no-deploy deploy_enable= \
|
||||
-c:,--deploy-config deploy_confname= \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
: "${SSH:=ssh}"
|
||||
|
@ -181,7 +198,7 @@ if [ "$action" == "configure" ]; then
|
|||
}$(<"$sshdir/$pubkey")"
|
||||
done
|
||||
fi
|
||||
[ -n "$PUBKEYS" ] || die "La connexion sur les hôtes distants ne peut se faire que par mot de passe parce que vous n'avez pas de clé publique configurée. Modifiez le fichier ~/etc/default.pubkeys si ce message est erroné."
|
||||
[ -n "$PUBKEYS" ] || die "La connexion sur les hôtes distants ne peut se faire que par mot de passe parce que vous n'avez pas de clé publique configurée. Modifiez le fichier ~/etc/default/pubkeys si ce message est erroné."
|
||||
|
||||
[ -n "${hosts[*]}" ] || hosts=("$@")
|
||||
[ -n "${hosts[*]}" ] || die "Vous devez spécifier la liste des hôtes à configurer"
|
||||
|
@ -214,6 +231,19 @@ else
|
|||
fi
|
||||
|
||||
## Hôtes sur lesquels faire le déploiement
|
||||
if array_isempty hosts && [ -n "$deploy_enable" ]; then
|
||||
urequire deploy
|
||||
deploy_setconf "$deploy_confname"
|
||||
if deploy_loadconf; then
|
||||
setxx module=abspath "$src" // basename --
|
||||
if eval "$(deploy_query -v host DEST module ruinst_deploy "" shell "$module")"; then
|
||||
check_interaction -c && einfo "Ce module sera déployé vers les hôtes suivants:
|
||||
$(array_to_lines host "" " ")"
|
||||
ask_any "Voulez-vous continuer?" Oq || die
|
||||
array_copy hosts host
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost"
|
||||
fix_hosts
|
||||
|
||||
|
@ -240,6 +270,11 @@ if [ -n "$make_archive" ]; then
|
|||
fi
|
||||
|
||||
## Déploiement
|
||||
|
||||
# sur l'hôte distant, ne rendre interactif qu'à partir de -yy
|
||||
rinteraction=$__interaction
|
||||
[ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1))
|
||||
|
||||
for host in "${hosts[@]}"; do
|
||||
if [ "$host" == "localhost" ]; then
|
||||
etitle -s "Déploiement sur l'hôte local"
|
||||
|
@ -258,11 +293,12 @@ for host in "${hosts[@]}"; do
|
|||
scp -S "$SSH" "$archive" "$user@$host:" || die
|
||||
estep "Lancement du script de déploiement"
|
||||
"$SSH" -qt "$user@$host" "\
|
||||
__estack=$(quoted_arg "$__estack")
|
||||
__tlevel=$(quoted_arg "$__tlevel")
|
||||
export __estack __tlevel
|
||||
__interaction=$rinteraction
|
||||
__estack=$(qval "$__estack")
|
||||
__tlevel=$(qval "$__tlevel")
|
||||
export __interaction __estack __tlevel
|
||||
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
|
||||
}$(quoted_args "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")"
|
||||
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")"
|
||||
eend
|
||||
fi
|
||||
done
|
||||
|
|
147
rwoinst
147
rwoinst
|
@ -10,7 +10,9 @@ USAGE
|
|||
$scriptname [-H host] [-T tmproot] <file|archive|dir>... [-- options de woinst]
|
||||
|
||||
OPTIONS
|
||||
-C Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||
-C, --configure-user
|
||||
--configure USER [--uses-su]
|
||||
Ne pas faire le déploiement. Configurer uniquement la connexion par clé
|
||||
sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir
|
||||
se connecter par mot de passe pour configurer la connexion par clé.
|
||||
Si l'on veut configurer la connexion par clé pour le user root, mais que
|
||||
|
@ -19,53 +21,135 @@ OPTIONS
|
|||
il est possible de faire la configuration avec '--configure root'. La
|
||||
commande serait alors
|
||||
$scriptname -H user@host --configure root
|
||||
-T tmproot
|
||||
Si l'hôte distant n'a pas sudo ou si sudo n'est pas configuré, il faut
|
||||
rajouter l'option --uses-su, e.g:
|
||||
$scriptname -h user@host --configure root --uses-su
|
||||
-T, --tmproot TMPROOT
|
||||
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
|
||||
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut
|
||||
un /tmp minuscule de 16 Mo.
|
||||
-S ssh
|
||||
-S, --ssh SSH
|
||||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
-h, --host hosts
|
||||
-h, --host @hostsfile
|
||||
-H host
|
||||
Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs
|
||||
options -H peuvent être spécifiées, ou alors on peut séparer plusieurs
|
||||
hôtes par ':', e.g. -H host1:host2
|
||||
Spécifier un ou plusieurs hôtes sur lequels faire le déploiement. Pour
|
||||
spécifier plusieurs hôtes, il est possible d'utiliser plusieurs fois
|
||||
l'option -h, ou spécifier en une seule fois plusieurs hôtes en les
|
||||
séparant par un espace ou le caractère ':', e.g. 'host1 host2' ou
|
||||
'host1:host2'. Si la spécification contient les caractères { et },
|
||||
l'expansion est effectuée, e.g
|
||||
-h 'root@{host1,host2}.univ.run'
|
||||
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||
user@host, e.g -H user@host"
|
||||
user@host, e.g -h user@host
|
||||
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
|
||||
hostsfile, à raison d'un hôte par ligne.
|
||||
--deploy
|
||||
--no-deploy
|
||||
Autoriser (respectivement interdire) l'utilisation de la configuration
|
||||
locale de déploiement pour identifier la destination si aucun hôte n'est
|
||||
spécifié.
|
||||
Par défaut, si aucun hôte n'est spécifié, la configuration locale de
|
||||
déploiement est interrogée pour avoir cette information.
|
||||
-c, --deploy-config CONFNAME
|
||||
Cette option permet de spécifier le nom de la configuration à utiliser
|
||||
pour effectuer la requête. Par défaut, utiliser le nom 'rwoinst'"
|
||||
}
|
||||
|
||||
set_defaults pubkeys
|
||||
|
||||
action=deploy
|
||||
confuser=
|
||||
uses_su=
|
||||
tmproot=
|
||||
hosts=()
|
||||
SSH=
|
||||
hosts=()
|
||||
deploy_enable=1
|
||||
deploy_confname=rwoinst
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
-C action=configure \
|
||||
-C,--configure-user action=configure \
|
||||
--configure: '$set@ confuser;action=configure' \
|
||||
--uses-su uses_su=1 \
|
||||
-T:,--tmproot: tmproot= \
|
||||
-S: SSH= \
|
||||
-S:,--ssh: SSH= \
|
||||
-h:,-H:,--host: hosts \
|
||||
--deploy deploy_enable=1 \
|
||||
--no-deploy deploy_enable= \
|
||||
-c:,--deploy-config deploy_confname= \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
function _dot_is_localhost() {
|
||||
[ "$1" == "." ] && echo "localhost" || echo "$1"
|
||||
SSH="${SSH:-ssh}"
|
||||
|
||||
__PARSED_HOSTS=()
|
||||
__PARSED_FILES=()
|
||||
function parse_hostsfile() {
|
||||
# Lire chacun des fichiers $* et initialiser __PARSED_HOSTS avec la liste
|
||||
# des hôtes mentionnés dans les fichiers.
|
||||
local inputfile basedir inputs input
|
||||
for inputfile in "$@"; do
|
||||
inputfile="$(abspath "$inputfile")"
|
||||
array_contains __PARSED_FILES "$inputfile" && {
|
||||
ewarn "$(ppath "$inputfile"): inclusion récursive"
|
||||
continue
|
||||
}
|
||||
array_add __PARSED_FILES "$inputfile"
|
||||
basedir="$(dirname "$inputfile")"
|
||||
|
||||
array_from_lines inputs "$(<"$inputfile" filter_conf)" || {
|
||||
ewarn "$inputfile: fichier ingnoré"
|
||||
continue
|
||||
}
|
||||
for input in "${inputs[@]}"; do
|
||||
if [ "${input#@}" != "$input" ]; then
|
||||
# fichier inclus
|
||||
parse_hostsfile "$(abspath "${input#@}" "$basedir")"
|
||||
else
|
||||
array_addu __PARSED_HOSTS "$input"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
function __expand_braces() {
|
||||
if [[ "$1" == *{* ]] && [[ "$1" == *}* ]]; then
|
||||
eval "echo $1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
function __dot_is_localhost() { [ "$1" == "." ] && echo "localhost" || echo "$1"; }
|
||||
function fix_hosts() {
|
||||
# Si hosts contient des éléments multiple, comme a:b, séparés ces
|
||||
# Si hosts contient des éléments multiple, comme a:b, séparer ces
|
||||
# éléments. i.e (a b:c) --> (a b c)
|
||||
# remplacer aussi les '.' par 'localhost'
|
||||
array_fix_paths hosts
|
||||
array_map hosts _dot_is_localhost
|
||||
# Supporter la syntaxe @hostsfile qui permet de charger la liste des hôtes
|
||||
# depuis un fichier.
|
||||
# Remplacer aussi les '.' par 'localhost'
|
||||
array_map hosts __expand_braces
|
||||
array_fix_paths hosts ":"
|
||||
array_fix_paths hosts " "
|
||||
|
||||
local -a _hosts _tmphosts host
|
||||
for host in "${hosts[@]}"; do
|
||||
host="${host%/}"
|
||||
if [ "${host#@}" != "$host" ]; then
|
||||
__PARSED_HOSTS=()
|
||||
parse_hostsfile "${host#@}"
|
||||
array_fix_paths __PARSED_HOSTS
|
||||
array_extendu _hosts __PARSED_HOSTS
|
||||
else
|
||||
array_addu _hosts "$host"
|
||||
fi
|
||||
done
|
||||
array_copy hosts _hosts
|
||||
array_map hosts __dot_is_localhost
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Configuration de l'accès par clé aux hôtes
|
||||
|
||||
if [ "$action" == "configure" ]; then
|
||||
args=(${confuser:+--configure "$confuser"})
|
||||
args=(${confuser:+--configure "$confuser"} ${uses_su:+--uses-su} -S "$SSH")
|
||||
for host in "${hosts[@]}"; do
|
||||
args=("${args[@]}" -H "$host")
|
||||
done
|
||||
|
@ -75,8 +159,6 @@ fi
|
|||
################################################################################
|
||||
# Déploiement
|
||||
|
||||
SSH="${SSH:-ssh}"
|
||||
|
||||
## Bundle à déployer
|
||||
if [ -z "$1" ] || [[ "$1" == -* ]] || [[ "$1" == *=* ]]; then
|
||||
# pas d'argument, ou c'est une option (qui fait donc partie des arguments de
|
||||
|
@ -85,6 +167,19 @@ if [ -z "$1" ] || [[ "$1" == -* ]] || [[ "$1" == *=* ]]; then
|
|||
fi
|
||||
|
||||
## Hôtes sur lesquels faire le déploiement
|
||||
if array_isempty hosts && [ -n "$deploy_enable" ]; then
|
||||
urequire deploy
|
||||
deploy_setconf "$deploy_confname"
|
||||
if deploy_loadconf; then
|
||||
setxx wobundle=abspath "$1" // basename --
|
||||
if eval "$(deploy_query -v host DEST wobundle rwoinst_bundle "" shell "$wobundle")"; then
|
||||
check_interaction -c && einfo "Ce bundle sera déployé vers les hôtes suivants:
|
||||
$(array_to_lines host "" " ")"
|
||||
ask_any "Voulez-vous continuer?" Oq || die
|
||||
array_copy hosts host
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost"
|
||||
fix_hosts
|
||||
|
||||
|
@ -147,6 +242,11 @@ etitle "Création de l'archive pour le déploiement" \
|
|||
"$scriptdir/mkusfx" --bare --tmp-archive -o "$archive" "$workdir" -- ./woinst --is-tmpdir "${bundles[@]}" || die
|
||||
|
||||
## Déploiement
|
||||
|
||||
# sur l'hôte distant, ne rendre interactif qu'à partir de -yy
|
||||
rinteraction=$__interaction
|
||||
[ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1))
|
||||
|
||||
for host in "${hosts[@]}"; do
|
||||
if [ "$host" == "localhost" ]; then
|
||||
etitle "Déploiement sur l'hôte local" \
|
||||
|
@ -164,11 +264,12 @@ for host in "${hosts[@]}"; do
|
|||
scp -S "$SSH" "$archive" "$user@$host:" || die
|
||||
estep "Lancement du script de déploiement"
|
||||
"$SSH" -qt "$user@$host" "\
|
||||
__estack=$(quoted_arg "$__estack")
|
||||
__tlevel=$(quoted_arg "$__tlevel")
|
||||
export __estack __tlevel
|
||||
__interaction=$rinteraction
|
||||
__estack=$(qval "$__estack")
|
||||
__tlevel=$(qval "$__tlevel")
|
||||
export __interaction __estack __tlevel
|
||||
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
|
||||
}$(quoted_args "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")"
|
||||
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")"
|
||||
eend
|
||||
fi
|
||||
done
|
||||
|
|
|
@ -349,7 +349,7 @@ Voulez-vous continuer?" O || return 1
|
|||
if [ -n "$edit" -a -n "$DWCOMMIT" ]; then
|
||||
__commit "$dwdir" "newpage $title --> $ns$name" newfiles modfiles || return
|
||||
else
|
||||
estepi "dwci $(quoted_args "dwci newpage $title --> $ns$name")"
|
||||
estepi "dwci $(qvals "dwci newpage $title --> $ns$name")"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
@ -453,7 +453,7 @@ function edit_cmd() {
|
|||
if [ -n "$DWCOMMIT" ]; then
|
||||
__commit "$dwdir" "edit ${page//\//:}" newfiles modfiles || return
|
||||
else
|
||||
estepi "dwci $(quoted_args "edit ${page//\//:}")"
|
||||
estepi "dwci $(qvals "edit ${page//\//:}")"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
@ -780,7 +780,7 @@ print tolower($0)
|
|||
if [ -n "$DWCOMMIT" ]; then
|
||||
__commit "$dwdir" "generate $srcdir" newfiles modfiles
|
||||
else
|
||||
estepi "dwci $(quoted_args "generate $srcdir")"
|
||||
estepi "dwci $(qvals "generate $srcdir")"
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
|
|
@ -237,7 +237,7 @@ function init_cmd() {
|
|||
read_value "URL du site MediaWiki" MWSITEURL http://localhost/mediawiki
|
||||
local var
|
||||
for var in MWDBHOST MWDBPORT MWDBUSER MWDBPASS MWDBNAME MWPREFIX MWSITEURL; do
|
||||
set_var_cmd "$var" "${!var}" >>"$mwdir/.mediawiki"
|
||||
echo_setv "$var" "${!var}" >>"$mwdir/.mediawiki"
|
||||
done
|
||||
fi
|
||||
|
||||
|
@ -351,7 +351,7 @@ Voulez-vous continuer?" N || return 1
|
|||
if [ -n "$edit" -a -n "$MWCOMMIT" ]; then
|
||||
__commit "$mwdir" "newpage $title --> $name" newfiles modfiles || return
|
||||
else
|
||||
estepi "mwci $(quoted_args "mwci newpage $title --> $name")"
|
||||
estepi "mwci $(qvals "mwci newpage $title --> $name")"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
@ -440,7 +440,7 @@ function edit_cmd() {
|
|||
if [ -n "$MWCOMMIT" ]; then
|
||||
__commit "$mwdir" "edit ${page//\//:}" newfiles modfiles || return
|
||||
else
|
||||
estepi "mwci $(quoted_args "edit ${page//\//:}")"
|
||||
estepi "mwci $(qvals "edit ${page//\//:}")"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
@ -926,7 +926,7 @@ print tolower($0)
|
|||
if [ -n "$MWCOMMIT" ]; then
|
||||
__commit "$mwdir" "generate $srcdir" newfiles modfiles
|
||||
else
|
||||
estepi "mwci $(quoted_args "generate $srcdir")"
|
||||
estepi "mwci $(qvals "generate $srcdir")"
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
|
10
udist
10
udist
|
@ -237,10 +237,10 @@ function __load_udist_nolocal() { (
|
|||
[ -d "$udistf" ] && udistf="$udistf/.udist"
|
||||
source "$udistf"
|
||||
|
||||
set_var_cmd "${2}VERSION" "$VERSION"
|
||||
echo_setv "${2}VERSION" "$VERSION"
|
||||
set_array_cmd "${2}VERSIONS" VERSIONS
|
||||
set_array_cmd "${2}TAGS" TAGS
|
||||
set_var_cmd "${2}ORIGIN" "$ORIGIN"
|
||||
echo_setv "${2}ORIGIN" "$ORIGIN"
|
||||
set_array_cmd "${2}LOCALS" LOCALS
|
||||
); }
|
||||
|
||||
|
@ -264,10 +264,10 @@ function __save_udist() {
|
|||
splitpair "$__su_dest" __su_dest __su_varname
|
||||
[ -n "$__su_varname" ] || __su_varname="$__su_dest"
|
||||
case "$__su_dest" in
|
||||
VERSION) array_add __su_cmd "$(set_var_cmd VERSION "${!__su_varname}")";;
|
||||
VERSION) array_add __su_cmd "$(echo_setv VERSION "${!__su_varname}")";;
|
||||
VERSIONS) array_add __su_cmd "$(set_array_cmd VERSIONS "${__su_varname}")";;
|
||||
TAGS) array_add __su_cmd "$(set_array_cmd TAGS "${__su_varname}")";;
|
||||
ORIGIN) array_add __su_cmd "$(set_var_cmd ORIGIN "${!__su_varname}")";;
|
||||
ORIGIN) array_add __su_cmd "$(echo_setv ORIGIN "${!__su_varname}")";;
|
||||
LOCALS) array_add __su_cmd "$(set_array_cmd LOCALS "${__su_varname}")";;
|
||||
esac
|
||||
done
|
||||
|
@ -1306,7 +1306,7 @@ function local_put_cmd() {
|
|||
local script=
|
||||
for localfile in "${localfiles[@]}"; do
|
||||
[ -n "$script" ] && script="$script; "
|
||||
script="$script$(quoted_args chown "$owner" "$destdir/$localfile")"
|
||||
script="$script$(qvals chown "$owner" "$destdir/$localfile")"
|
||||
done
|
||||
"${ssh:-ssh}" -qt "$userhost:$destdir" "$script"
|
||||
fi
|
||||
|
|
12
uldap
12
uldap
|
@ -41,7 +41,7 @@ function split_cmds() {
|
|||
fi
|
||||
done
|
||||
if [ -n "$__sc_addtocmd" ]; then
|
||||
__sc_cmd="${__sc_cmd:+$__sc_cmd }$(quoted_arg "$__sc_arg")"
|
||||
__sc_cmd="${__sc_cmd:+$__sc_cmd }$(qvalm "$__sc_arg")"
|
||||
__sc_arg=
|
||||
fi
|
||||
if [ -n "$__sc_foundsep" ]; then
|
||||
|
@ -150,7 +150,7 @@ function set_values() {
|
|||
if array_contains VARIABLES "$uname" || array_contains SPECIAL_VARIABLES "$uname"; then
|
||||
"set_$lname" "$value" || s=1
|
||||
elif ! array_contains PROTECTED_VARIABLES "$name"; then
|
||||
set_var "$name" "$value"
|
||||
_setv "$name" "$value"
|
||||
else
|
||||
s=1
|
||||
fi
|
||||
|
@ -321,7 +321,7 @@ function __push() {
|
|||
local __varcmd __name
|
||||
for __name in "$@"; do
|
||||
__varcmd="${__varcmd:+$__varcmd
|
||||
}$(set_var_cmd "$__name" "${!__name}")"
|
||||
}$(echo_setv "$__name" "${!__name}")"
|
||||
done
|
||||
WSSTACK=("${WSSTACK[@]}" "$__varcmd")
|
||||
}
|
||||
|
@ -1349,7 +1349,7 @@ function uldap_undo() {
|
|||
|
||||
function uldap_ifok() {
|
||||
if [ "$EXITCODE" -eq 0 ]; then
|
||||
eval_cmdline "$(quoted_args "$@")"
|
||||
eval_cmdline "$(qvals "$@")"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
|
@ -1357,7 +1357,7 @@ function uldap_ifok() {
|
|||
|
||||
function uldap_iferror() {
|
||||
if [ "$EXITCODE" -ne 0 ]; then
|
||||
eval_cmdline "$(quoted_args "$@")"
|
||||
eval_cmdline "$(qvals "$@")"
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
|
@ -1464,7 +1464,7 @@ if [ -n "$*" ]; then
|
|||
INTERACTIVE=
|
||||
[ "$EXIT_ON_ERROR" == auto ] && set_values exit_on_error=true
|
||||
# splitter sur les lignes
|
||||
array_from_lines lcmds "$(quoted_args "$@")"
|
||||
array_from_lines lcmds "$(qvals "$@")"
|
||||
[ -n "$AUTOPRINT" ] && array_add lcmds print
|
||||
elif [ -n "$lscriptfile" ]; then
|
||||
[ -f "$lscriptfile" ] || die "$lscriptfile: fichier introuvable"
|
||||
|
|
10
ulib
10
ulib
|
@ -343,18 +343,18 @@ if ! grep -q '$scriptdir/profile' ~/.bash_profile; then
|
|||
fi
|
||||
|
||||
# Modifier le PATH. Ajouter aussi le chemin vers les uapps python
|
||||
PATH=$(quoted_args "$scriptdir:$scriptdir/lib/pyulib/src/uapps:$PATH")
|
||||
PATH=$(qval "$scriptdir:$scriptdir/lib/pyulib/src/uapps:$PATH")
|
||||
|
||||
if [ -n '$DEFAULT_PS1' ]; then
|
||||
DEFAULT_PS1=$(quoted_args "[ulibshell] $DEFAULT_PS1")
|
||||
DEFAULT_PS1=$(qval "[ulibshell] $DEFAULT_PS1")
|
||||
else
|
||||
if [ -z '$PS1' ]; then
|
||||
PS1='\\u@\\h \\w \\$ '
|
||||
fi
|
||||
PS1=\"[ulibshell] \$PS1\"
|
||||
fi
|
||||
$(quoted_args source "$scriptdir/lib/ulib/ulib")
|
||||
__ULIB_FORCE_RELOAD=$(quoted_args "$__ULIB_FORCE_RELOAD")
|
||||
$(qvals source "$scriptdir/lib/ulib/ulib")
|
||||
__ULIB_FORCE_RELOAD=$(qval "$__ULIB_FORCE_RELOAD")
|
||||
urequire DEFAULTS" >"$bashrc"
|
||||
|
||||
array_fix_paths modules
|
||||
|
@ -362,7 +362,7 @@ urequire DEFAULTS" >"$bashrc"
|
|||
etitle "Chargement des modules"
|
||||
for module in "${modules[@]}"; do
|
||||
estep "$module"
|
||||
quoted_args urequire "$module" >>"$bashrc"
|
||||
qvals urequire "$module" >>"$bashrc"
|
||||
done
|
||||
eend
|
||||
fi
|
||||
|
|
8
umatch
8
umatch
|
@ -120,14 +120,14 @@ case "$regexp" in
|
|||
ip) regexp='[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+';;
|
||||
esac
|
||||
|
||||
cmd="$(quoted_args match "$regexp" "$sep")"
|
||||
cmd="$(qvals match "$regexp" "$sep")"
|
||||
[ -n "$sort" ] && cmd="$cmd | sort"
|
||||
[ -n "$count" ] && cmd="$cmd | $(quoted_args count "$count" "$sep" "$all_lines")"
|
||||
[ -n "$count" ] && cmd="$cmd | $(qvals count "$count" "$sep" "$all_lines")"
|
||||
if [ -n "$multiple" ]; then
|
||||
if [ -n "$all_lines" ]; then
|
||||
cmd="$cmd | $(quoted_args grep -v -B 1 "^1$sep")"
|
||||
cmd="$cmd | $(qvals grep -v -B 1 "^1$sep")"
|
||||
else
|
||||
cmd="$cmd | $(quoted_args grep -v "^1$sep")"
|
||||
cmd="$cmd | $(qvals grep -v "^1$sep")"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
15
uscrontab
15
uscrontab
|
@ -285,7 +285,13 @@ OPTIONS AVANCEES
|
|||
Pour le développement ou des tests, forcer la valeur de l'heure de
|
||||
référence. Il faut respecter le format, sinon les résultats ne sont pas
|
||||
garantis. Le mieux est de reprendre le résultat de l'option --show-ctnow
|
||||
en le modifiant un peu si nécessaire."
|
||||
en le modifiant un peu si nécessaire.
|
||||
-G, --any-ctnow
|
||||
Pour le développement ou des tests, lancer toutes les commandes dans
|
||||
l'ordre sans tenir compte de l'heure de référence. Cette commande ne
|
||||
devrait pas être utilisée en temps normal, mais elle existe pour
|
||||
simplifier les tests avec --show-ctnow + --force-ctnow dans les cas
|
||||
simples."
|
||||
}
|
||||
|
||||
function set_usercrontabs() {
|
||||
|
@ -361,6 +367,7 @@ parse_opts "${PRETTYOPTS[@]}" \
|
|||
-k:,--stop: USCRONTAB_STOPEC= \
|
||||
--show-ctnow action=show-ctnow \
|
||||
--force-ctnow: __CTRESOLVE_CTNOW= \
|
||||
-G,--any-ctnow __CTRESOLVE_CTNOW="**ANY**" \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
uscrontab="$1"; shift
|
||||
|
@ -477,12 +484,12 @@ fi
|
|||
|
||||
if [ "$action" == "install" ]; then
|
||||
ctline="$USCRONTAB_CTLINE"
|
||||
[ -n "$uscrontab" ] && ctline="$ctline $(quoted_arg "$uscrontab")"
|
||||
[ -n "$uscrontab" ] && ctline="$ctline $(qvalm "$uscrontab")"
|
||||
enable_in_crontab "$ctline" && estep "add_to_crontab $ctline"
|
||||
|
||||
elif [ "$action" == "uninstall" ]; then
|
||||
ctline="$USCRONTAB_CTLINE"
|
||||
[ -n "$uscrontab" ] && ctline="$ctline $(quoted_arg "$uscrontab")"
|
||||
[ -n "$uscrontab" ] && ctline="$ctline $(qvalm "$uscrontab")"
|
||||
if [ -n "$disable_only" ]; then
|
||||
disable_in_crontab "$ctline" && estep "disable_in_crontab $ctline"
|
||||
else
|
||||
|
@ -648,7 +655,7 @@ puis supprimez le cas échéant le fichier $pidfile"
|
|||
for __var in "$@"; do
|
||||
splitvar "$__var" __name __value
|
||||
edebug "$__name=$__value"
|
||||
set_var "$__name" "$__value"
|
||||
_setv "$__name" "$__value"
|
||||
done
|
||||
eval "$__ctscript"
|
||||
ac_cleanall
|
||||
|
|
6
ussh
6
ussh
|
@ -369,13 +369,13 @@ function show_vars() {
|
|||
local -a sshopts
|
||||
[ "${#hosts[*]}" -gt 1 ] && exec=
|
||||
set_array_cmd hosts
|
||||
set_var_cmd ssh "$SSH"
|
||||
set_var_cmd exec "$exec"
|
||||
echo_setv ssh "$SSH"
|
||||
echo_setv exec "$exec"
|
||||
set_array_cmd args @ "$@"
|
||||
for host in "${hosts[@]}"; do
|
||||
array_copy sshopts SSHOPTS
|
||||
__update_sshopts "$host" "$@"
|
||||
set_var_cmd host "$host"
|
||||
echo_setv host "$host"
|
||||
set_array_cmd options sshopts
|
||||
done
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue