Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
{{{
EnsureVM: s'assurer que les services sont lancés pour un type de virtualisation
USAGE
EnsureVM type
Les types supportés sont virtualbox et kvm (par défaut)
}}}
!Présentation
nutools est un ensemble d'utilitaires pour faciliter l'utililisation des Unixes, en particulier Linux, mais aussi MacOS X et Cygwin.
C'est aussi une librairie de scripts shell réutilisables ([[ulib]]) et une librairie de modules python réutilisables (pyulib)
!Prérequis
Python >= 2.3 et GNU Awk sont requis pour que toutes les fonctionnalités soient supportées.
* Sous Linux, lors de l'installation du package, les meilleurs efforts sont fait pour que ces packages soient installés.
* Sous MacOSX, il faut installer manuellement Fink, DarwinPorts ou Homebrew
! Outils
Chaque outil contient une aide intégrée. Il suffit de lancer l'outil avec l'argument {{{--help}}} pour avoir une aide détaillée.
* Déploiement d'un répertoire ou d'une archive
** [[uinst]]: Déploiement local
** [[mkusfx]]: Faire une archive auto-installable avec uinst
** [[ruinst]]: Déploiement distant avec uinst
** [[runs]]: Lancer un script avec le protocole RUNS
** [[rruns]]: Déploiement distant avec runs
* Librairie réutilisable de scripts shell
** [[uinc]]: Dépliage des inclusions dans un fichier
** [[ulibsync]]: Faire une copie locale pour un projet de ulib et/ou pyulib
* Autres outils
** [[udir]]: Gestion des paramètres d'un répertoire. Ces paramètres sont entre autres utilisés par uinst et uinc.
{{{
SKvm: lancer une machine virtuelle kvm
USAGE
SKvm [options] vmName
SKvm {-l|-A|-g}
OPTIONS
-n, --check
Ne rien faire excepté s'assurer que les modules kvm sont chargés
-u, --user
Lancer l'opération avec les droits de l'utilisateur courant. Par défaut,
ce script tente d'acquérir les droits de root.
-l, --list
Lister les machines virtuelles
-s, --start
Démarrer la machine virtuelle (par défaut)
Si le nom de la machine virtuelle n'est pas spécifiée, un menu est
affiché
-k, --stop
Arrêter la machine virtuelle
-H, --destroy
Arrêter sauvagement la machine virtuelle
-r, --restart
Redémarrer la machine virtuelle
-S, --managed-save
Enregistrer l'état de la machine virtuelle
-A, --stop-all
Arrêter toutes les machines virtuelles qui tournent actuellement
-g, --gui
Afficher le gestionnaire de machines virtuelle
}}}
{{{
SVirtualBox: lancer une machine virtuelle VirtualBox
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)
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
}}}
Outils divers pour linux/macosx, et librairies pour bash
{{{
_root: devenir l'utilisateur root, avec 'sudo' si possible, ou 'su' si
'sudo' n'est pas installé
}}}
{{{
apacheconfig: Gérer la configuration d'un serveur web apache
USAGE
apacheconfig -c
apacheconfig -t -- args...
OPTIONS
-c, --create
Créer un nouveau répertoire de configuration pour un hôte
-d, --destdir DESTDIR[=apacheconfig]
Nom du répertoire local de configuration.
-t, --template [OPT]
Gérer les fichiers du répertoire local avec templatectl. La valeur de
cette option est utilisée comme argument court pour l'invocation de
templatectl, e.g
apacheconfig -tm args
est équivalent à
templatectl -m args
Les arguments qui restent sont passés tels quels à templatectl
Les options courantes de templatectl -l, -v, -m, -L sont disponibles
directement
--help-template
Afficher l'aide concernent la gestion des templates.
Equivalent à -t -- --help
-h, --host HOST
Spécifier l'hôte. Equivalent à -v host=HOST
--sysname SYSNAME
--sysdist SYSDIST
-s, --sysver SYSVER
Spécifier la distribution pour laquelle synchroniser le template. Par
défaut, choisir les valeurs correspondantes au système courant.
Les options -7 et -8 sont des aliases respectivement pour -s wheezy et
-s jessie, parce que les fichiers par défaut ont changé à partir de
debian jessie.
-u, --update, --deploy
Mettre à jour la configuration système à partir du répertoire local.
Lors du déploiement de la configuration, les valeurs des variables
dynamiques sont remplacées dans les fichiers destination.
Les arguments qui restent sont passés tels quels à apache_autoconf
-r, --certsdir CERTSDIR
Spécifier le cas échéant le répertoire contenant les certificats à
déployer. Cet argument est requis si le répertoire certsconf/ existe.
--localhosts
Créer dans le fichier /etc/hosts tous les noms d'hôte ayant un suffixe
.local mentionnés dans les fichiers de site. Cette option est utile pour
le développement et les tests.
-C, --one-conf CONF
Ne déployer que le fichier de configuration spécifié. Cette option est
utilisée avec --deploy et est utile pour le développement et les tests.
-M, --one-module MODULE
Ne déployer que le fichier de module spécifié. Cette option est utilisée
avec --deploy et est utile pour le développement et les tests.
-S, --one-site SITE
Ne déployer que le fichier de site spécifié. Cette option est utilisée
avec --deploy ou --localhosts et est utile pour le développement et les
tests.
}}}
{{{
authftp: Se connecter sur un site FTP authentifié
Ce script nécessite ncftp. Il est conçu pour faciliter l'accès à des sites FTP
s'il est requis d'y accéder par un proxy FTP pour les connexion authentifiées.
USAGE
authftp [options] host login password [path]
OPTIONS
-p, --proxy
-n, --noproxy
Forcer l'utilisation, resp. ne pas utiliser, le proxy FTP (i.e. faire la
connexion directement)
-l, --lftp
Se connecter avec lftp au lieu de ncftp. Le fonctionnement n'est pas
garanti si l'on utilise un proxy FTP.
-o OPTION
Ajouter une option à la commande lancée. Si l'option prend un argument,
il faut doubler l'option -o, e.g.
authftp -l -o -e -o 'mirror remote local' host login pass
Dans cet exemple, l'option -e de lftp est utilisée pour faire un miroir
local du répertoire remote.
--tls
Indiquer que la connexion se fera en TLS. Implique --lftp puisque ncftp
ne le supporte pas.
note: A cause d'une limitation de lftp, ce n'est pas possible de se connecter
automatiquement avec lftp si le mot de passe contient une virgule. A cause de la
façon dont le proxy ftp est configuré, il n'est pas possible de se connecter
avec un mot de passe qui contient le caractère @
}}}
{{{
caturl: Afficher une url
USAGE
caturl <file.url|file.desktop|URL>
OPTIONS
-c, --check
Vérifier que le fichier est valide
-g, --get
Attaquer l'url spécifiée avec curl
}}}
{{{
compileAndGo: see http://Yost.com/computers/compileAndGo
}}}
{{{
cssh: Faire une connexion ssh en lançant automatiquement un screen sur l'hôte distant
USAGE
cssh [user@]host [options]
En principe, hormis l'argument user@host, il ne faudrait spécifier que des
options. Dans le cas où d'autres arguments seraient spécifiés, les meilleurs
efforts sont faits pour lancer ces commandes avant screen.
}}}
{{{
doinplace: filtrer en place un fichier à travers une suite de commandes
USAGE
doinplace FILE COMMAND [ARGS...]
Si on utilise une commande avec des options, penser à utliser '--' pour séparer
les options de ce script des options de la commande
En plus des commandes systèmes, il est possible d'utiliser toute fonction de
nutools qui effectue des traitement sur un flux comme stripnl, filter_empty,
merge_contlines, filter_comment, filter_conf, etc. Les fonctions nl2lf, nl2crlf,
nl2cr, latin1compat et noaccents sont aussi disponibles par convenance.
OPTIONS
-p, --evalp
Evaluer la commande avec evalp(), ce qui permet de chainer plusieurs
commandes en les séparant par //. Cette option est automatiquement
activée si ce script est lancé avec le nom doinplacex
-g, --ignore-error, --replace-always
Normalement, le fichier n'est pas remplacé si la commande retourne une
erreur. Avec cette option, le fichier est remplacé quel que soit le code
de retour de la commande. A utiliser par exemple avec des commandes
comme grep qui peuvent retourner FAUX s'ils ne trouvent pas le motif.
Cette option est automatiquement activée si ce script est lancé avec le
nom doinplacef
}}}
{{{
dumpclients: afficher les connexions TCP entrantes sur un port
USAGE
dumpclients [options] port
OPTIONS
-4, --only-tcp
-6, --only-tcp6
Se limiter au protocole spécifié. Par défaut, afficher toutes les
connexions, qu'elles soient en IPv4 ou en IPv6
-a, --all
Afficher tous les sockets, y compris les ports d'écoute. Par défaut,
seules les sockets ouvertes sont affichées.
-n, --numeric
Afficher uniquement les adresses IP au lieu du nom d'hôte.
-z, --allow-no-port
Ne pas exiger que le port soit spécifié
--show none,ip,port,state
Spécifier d'afficher comme informations supplémentaire: rien, l'adresse
ip, le port et/ou l'état. Par défaut, afficher le port et l'état.
}}}
{{{
Usage: /usr/bin/emacs [OPTION-OR-FILENAME]...
Run Emacs, the extensible, customizable, self-documenting real-time
display editor. The recommended way to start Emacs for normal editing
is with no options at all.
Run M-x info RET m emacs RET m emacs invocation RET inside Emacs to
read the main documentation for these command-line arguments.
Initialization options:
--batch do not do interactive display; implies -q
--daemon start a server in the background
--debug-init enable Emacs Lisp debugger for init file
--display, -d DISPLAY use X server DISPLAY
--no-desktop do not load a saved desktop
--no-init-file, -q load neither ~/.emacs nor default.el
--no-shared-memory, -nl do not use shared memory
--no-site-file do not load site-start.el
--no-splash do not display a splash screen on startup
--no-window-system, -nw do not communicate with X, ignoring $DISPLAY
--quick, -Q equivalent to -q --no-site-file --no-splash
--script FILE run FILE as an Emacs Lisp script
--terminal, -t DEVICE use DEVICE for terminal I/O
--user, -u USER load ~USER/.emacs instead of your own
Action options:
FILE visit FILE using find-file
+LINE go to line LINE in next FILE
+LINE:COLUMN go to line LINE, column COLUMN, in next FILE
--directory, -L DIR add DIR to variable load-path
--eval EXPR evaluate Emacs Lisp expression EXPR
--execute EXPR evaluate Emacs Lisp expression EXPR
--file FILE visit FILE using find-file
--find-file FILE visit FILE using find-file
--funcall, -f FUNC call Emacs Lisp function FUNC with no arguments
--insert FILE insert contents of FILE into current buffer
--kill exit without asking for confirmation
--load, -l FILE load Emacs Lisp FILE using the load function
--visit FILE visit FILE using find-file
Display options:
--background-color, -bg COLOR window background color
--basic-display, -D disable many display features;
used for debugging Emacs
--border-color, -bd COLOR main border color
--border-width, -bw WIDTH width of main border
--color, --color=MODE override color mode for character terminals;
MODE defaults to `auto', and can also
be `never', `auto', `always',
or a mode name like `ansi8'
--cursor-color, -cr COLOR color of the Emacs cursor indicating point
--font, -fn FONT default font; must be fixed-width
--foreground-color, -fg COLOR window foreground color
--fullheight, -fh make the first frame high as the screen
--fullscreen, -fs make first frame fullscreen
--fullwidth, -fw make the first frame wide as the screen
--maximized, -mm make the first frame maximized
--geometry, -g GEOMETRY window geometry
--no-bitmap-icon, -nbi do not use picture of gnu for Emacs icon
--iconic start Emacs in iconified state
--internal-border, -ib WIDTH width between text and main border
--line-spacing, -lsp PIXELS additional space to put between lines
--mouse-color, -ms COLOR mouse cursor color in Emacs window
--name NAME title for initial Emacs frame
--no-blinking-cursor, -nbc disable blinking cursor
--reverse-video, -r, -rv switch foreground and background
--title, -T TITLE title for initial Emacs frame
--vertical-scroll-bars, -vb enable vertical scroll bars
--xrm XRESOURCES set additional X resources
--parent-id XID set parent window
--help display this help and exit
--version output version information and exit
You can generally also specify long option names with a single -; for
example, -batch as well as --batch. You can use any unambiguous
abbreviation for a --option.
Various environment variables and window system resources also affect
Emacs' operation. See the main documentation.
Report bugs to bug-gnu-emacs@gnu.org. First, please see the Bugs
section of the Emacs manual or the file BUGS.
}}}
{{{
fconv: convertir un fichier ou les fichiers d'un répertoire
USAGE
fconv -f FILE [cmds...]
fconv FILE [cmds...]
Une ou plusieurs commandes peuvent être spécifiées, séparées par //
La commande par défaut est 'lf'
Si des commandes utilisant des options sont utilisées, penser à séparer les
options de fconv avec --
OPTIONS
-N, --detect-always
Pour la commande conv, ne pas optimiser le calcul de l'encoding. Cette
option n'est valide que si src_enc n'est pas spécifié. On assume que
tous les fichiers n'ont pas le même encoding: l'encoding src_enc est
donc recalculé à chaque fois.
-r, --reverse
Pour la commande conv, inverser src_enc et dest_enc, qui doivent être
tous les deux spécifiés.
-f, --file FILE
Spécifier le fichier ou le répertoire concerné par la conversion. Les
aliases -d et --dir sont aussi reconnus.
Si cette option n'est pas spécifiée, le premier argument est considéré
comme le nom du fichier ou du répertoire à convertir. Par défaut,
convertir l'entrée standard.
Si un répertoire est spécifié, tous les fichiers de ce répertoire et de
ses sous-répertoires sont recherchés de façon récursive, sans limite de
profondeur. Ensuite, chacun de ces fichiers est converti.
--show-cmd
Afficher la commande qui serait exécutée
COMMANDES
c, conv dest_enc [src_enc]
Convertir le fichier dans un autre encoding.
dest_enc est l'encoding destination. Il doit être spécifié.
src_enc est l'encoding source. S'il n'est pas spécifié ou vaut 'detect',
il est autodétecté.
U, utf8 [src_enc]
Equivalent à conv utf8 src_enc
L, latin1 [src_enc]
Equivalent à conv latin1 src_enc
lf
crlf
cr
Convertir respectivement les caractères de fin de ligne en LF, CR/LF ou CR
lc, latin1compat
Transformer certains caratères UTF-8 en équivalents qui existent en Latin1
na, noaccents
Transformer les caractères accentués en caractères non accentués
sort [-u]
Trier le fichier avec la commande sort. Attention! Il ne faut utiliser
que les options de sort qui agissent sur un flux e.g. -u pour trier les
lignes de façon unique.
}}}
{{{
fnconv: renommer un fichier ou les fichiers d'un répertoire
USAGE
fnconv -f FILE [cmds...]
fnconv FILE [cmds...]
Une ou plusieurs commandes peuvent être spécifiées, séparées //
La commande par défaut est 'fixcase'
OPTIONS
-N, --detect-always
Pour la commande conv, ne pas optimiser le calcul de l'encoding. Cette
option n'est valide que si src_enc n'est pas spécifié. On assume que
tous les fichiers n'ont pas le même encoding: l'encoding src_enc est
donc recalculé à chaque fois.
-r, --reverse
Pour la commande conv, inverser src_enc et dest_enc, qui doivent être
tous les deux spécifiés.
-f, --file FILE
Spécifier le fichier ou le répertoire concerné par le renommage. Les
aliases -d et --dir sont aussi reconnus.
Si cette option n'est pas spécifiée, le premier argument est considéré
comme le nom du fichier ou du répertoire à renommer.
Si un répertoire est spécifié, le traitement est appliqué à tous les
fichiers et répertoires de façon récursive, sans limite de profondeur.
--show-cmd
Afficher la commande qui serait exécutée
COMMANDES
C, conv dest_enc [src_enc]
Convertir le nom du fichier dans un autre encoding.
dest_enc est l'encoding destination. Il doit être spécifié.
src_enc est l'encoding source. S'il n'est pas spécifié ou vaut 'detect',
il est autodétecté.
U, utf8 [src_enc]
Equivalent à conv utf8 src_enc
L, latin1 [src_enc]
Equivalent à conv latin1 src_enc
lc, latin1compat
Transformer certains caratères UTF-8 en équivalents qui existent en Latin1
na, noaccents
Transformer les caractères accentués en caractères non accentués
l, lowercase
Transfomer le nom en minuscule
u, uppercase
Transformer le nom en majuscule
f, fixcase
Transformer le nom en minuscule s'il est entièrement en majuscule
}}}
{{{
geturl: Télécharger un fichier avec wget ou curl
USAGE
geturl <file.url|file.desktop|URL> [wget options]
}}}
{{{
mkRewriteRules: Créer un fichier de redirections pour Apache à partir d'un certain
nombre de règles
USAGE
mkRewriteRules -f rewrite.rules [-o RewriteRules.conf] [-w RewriteRules.html] host
OPTIONS
-p Générer les directives <Proxy...> et tenir compte de proxy_acls
Par défaut, le champ proxy_acls est ignoré
FORMAT des règles de mapping
============================
Les commentaires commencent par le signe "#"
Les règles sont de la forme:
src:dest:host:suffix:OPTS:prot:proxy_acls
^prefix
=literal
prot vaut par défaut http. Il peut valoir aussi https
Si dest ou suffix se terminent par $, on est en mode NO_SLASH
En mode NO_SLASH, si src se termine par $, on est en mode NO_TRAIL
* Si dest est de la forme Application.woa
En mode NO_SLASH, on génère
RewriteRule ^/src(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]$1 [L,OPTS]
En mode NO_SLASH+NO_TRAIL, on génère
RewriteRule ^/src [prot://host]/cgi-bin/WebObjects/dest[/suffix] [L,OPTS]
En mode normal, on génère
RewriteRule ^/src$ /src/
RewriteRule ^/src/(.*) [prot://host]/cgi-bin/WebObjects/dest[/suffix]/$1 [L,OPTS]
* Si dest n'est pas de la forme Application.woa
En mode NO_SLASH, on génère
RewriteRule ^/src(.*) [prot://host]/dest[/suffix]$1 [L,OPTS]
En mode NO_SLASH+NO_TRAIL, on génère
RewriteRule ^/src [prot://host]/dest[/suffix] [L,OPTS]
En mode normal, on génère
RewriteRule ^/src$ /src/
RewriteRule ^/src/(.*) /dest[/suffix]/$1 [L,OPTS]
Si une règle est précédée d'une ou plusieurs lignes de la forme "^prefix",
ces lignes sont copiées avant chacune des commandes RewriteRule générées
pour une règle. Ceci permet d'ajouter des conditions avec RewriteCond pour
une règle. e.g.
^RewriteCond %{REMOTE_ADDR} 10\..*
src:dest.woa
qui génère:
RewriteCond %{REMOTE_ADDR} 10\..*
RewriteRule ^/src$ /src/
RewriteCond %{REMOTE_ADDR} 10\..*
RewriteRule ^/src/(.*) /cgi-bin/WebObjects/dest.woa/$1 [L]
Une ligne de la forme "=literal" est recopiée sans modifications (sans le "=")
dans le fichier de sortie.
proxy_acls est utilisé si l'option -p est spécifiée et OPTS contient P (comme
proxy), ou si le mode de réécriture requière l'utilisation d'un proxy.
* Avec la valeur "None", aucune directive <Proxy> n'est générée
* Si aucune valeur n'est spécifiée, la directive suivante est générée:
<Proxy $URL>
AddDefaultCharset off
Order Deny,Allow
Allow from all
</Proxy>
* Si une valeur est spécifiée, la directive suivante est générée:
<Proxy $URL>
AddDefaultCharset off
Order Allow,Deny
Allow from $proxy_acls
</Proxy>
Dans les exemples donnés ci-dessus, $URL est l'url générée par la réécriture,
et $proxy_acls la valeur du champ proxy_acls spécifiée ci-dessus.
}}}
{{{
mkiso: créer une image iso d'un répertoire
USAGE
mkiso [options] srcdir [dest.iso]
OPTIONS
-M, --hfs
créer une image hybride ISO/HFS
-V, --volume
Nom du volume. Par défaut, prendre le nom de base du répertoire
d'origine. La taille est de 32 caractères max.
-A, --application
Description de l'application qui est sur l'image créée. Par défaut,
prendre le nom de base du répertoire d'origine. La taille est de 128
caractères max.
}}}
{{{
mkurl: Enregistrer une url dans un fichier raccourci
USAGE
mkurl <url> [output]
OPTIONS
Par défaut, l'url est enregistrée dans un fichier homepage.url
Mais il est possible de spécifier un fichier avec l'extension .url pour un
raccourci utilisable aussi sous Windows, ou avec l'extension .desktop pour
compatibilité avec le standard XDG
}}}
{{{
mkusfx: Créer une archive auto-extractible qui installe son contenu avec uinst
USAGE
mkusfx [options] [--bare] src cmd...
mkusfx [options] [--uinst] src
OPTIONS
--bare
Installer le contenu de l'archive en lançant la commande 'cmd...' avec
le répertoire courant étant le contenu de l'archive. Typiquement, ce
sera une commande de forme './script', où script est un fichier situé à
la racine de l'archive
Dans ce mode d'installation, l'option --self-contained est ignorée.
--uinst
Installer le contenu de l'archive avec uinst (par défaut)
-o dest
Spécifier le fichier de sortie. Par défaut, il s'agit de
${src}-installer.run
--tmp-archive
Spécifier qu'il s'agit d'une archive temporaire. Cette archive
s'auto-détruit après utilisation.
--self-contained
Spécifier que l'archive doit pouvoir s'installer même sur un système sur
lequel nutools n'est pas installé. Cette archive contiendra une copie
locale de ulib et uinst.sh
}}}
{{{
mocifs: Monter un partage Windows/Samba/CIFS
USAGE
mocifs [user@]host[/path] [mountpoint]
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
Les options -M et -U permettent de modifier le comportement par défaut.
OPTIONS
-M
Forcer le montage
-U
Forcer le démontage
-o OPTIONS
Ajouter les options spécifiées à la commande de montage mount.cifs
-u USERNAME
-p PASSWORD
-c USERNAME:PASSWORD
Spécifier les credentials à utiliser pour la connexion
}}}
{{{
modav: Monter un répertoire sur un hôte distant avec davfs
USAGE
modav http[s]://host[/path] [mountpoint]
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
Les options -M et -U permettent de modifier le comportement par défaut.
OPTIONS
-M
Forcer le montage
-U
Forcer le démontage
-o OPTIONS
Ajouter les options spécifiées à la commande de montage
-u USERNAME
-p PASSWORD
-c USERNAME:PASSWORD
Si les credentials à utiliser ne sont pas configuré dans le fichier
/etc/davfs2/secrets, cette option permet de les spécifier. Si cette
option est utilisée, il est possible de rajouter
ask_auth 0
dans le fichier /etc/davfs2/davfs2.conf pour éviter le conflit qui se
produit quand des informations sont demandées interactivement. C'est le
cas par exemple si une connexion en https est faite et que la chaine de
certification n'est pas configurée. Pour mémoire, cela se fait avec
servercert myCAs.pem
dans le fichier /etc/davfs2/davfs2.conf
Bien entendu, il est préférable de configurer les credentials dans le
fichier /etc/davfs2/secrets avec la syntaxe
url username password
ou
mountpoint username password
}}}
{{{
moiso: Monter une image ISO
USAGE
moiso image.iso [mountpoint]
Par défaut, l'image iso est montée sur un répertoire avec le même nom de base.
Si l'image est déjà montée, elle est démontée. Les options -m et -u permettent
de modifier le comportement par défaut.
OPTIONS
-m
Forcer le montage
-u
Forcer le démontage
}}}
{{{
mossh: Monter un répertoire sur un hôte distant avec sshfs
USAGE
mossh [user@]host[:/path] [mountpoint]
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
Les options -M et -U permettent de modifier le comportement par défaut.
OPTIONS
-M
Forcer le montage
-U
Forcer le démontage
-o OPTIONS
Ajouter les options spécifiées à la commande de montage
-s
Equivalent à -o allow_other ou -o allow_root selon que l'on est root ou
non
-u USER
Spécifier le user pour la connexion distante, s'il n'est pas possible de
le spécifier dans l'url. En cas de conflit, la valeur dans l'url est
prioritaire par rapport à cette option.
}}}
{{{
mysqlcsv: Faire une requête MySQL et formater la sortie pour traitement avec awkcsv
USAGE
mysqlcsv [query [db]] [-- mysql options]
query est la requête sql à exécuter. Si query n'est pas spécifiée, la(les)
requête(s) sql sont prises sur l'entrée standard, ou depuis un fichier
si l'option -f est spécifiée.
db est le nom de la base de données. Cette argument n'est lu que si le nom
de la base de donnée n'est ni spécifié dans le fichier de configuration,
ni spécifié avec l'option -D
OPTIONS
-h, --host HOST
-P, --port PORT
-u, --user USER
-pPASSWORD
-D, --database DATABASE
Informations de connexion à la base de données
-C, --config CONFIG
Prendre les informations de connexion depuis le fichier spécifié.
Le fichier doit être de la forme
host=HOST
#post=3306
user=USER
password=PASS
#database=DB
#query=QUERY
Les variables port, database et query sont facultatives.
Les valeurs définies dans ce fichier sont prioritaires par rapport à
celles qui auraient été spécifiées sur la ligne de commande.
Utiliser password=--NOT-SET-- s'il faut se connecter sans mot de passe
Cette option peut être utilisée plusieurs fois, auquel cas les fichiers
sont chargés dans l'ordre.
--profile PROFILE
La variable $PROFILE est définie avec la valeur spécifiée avant de
sourcer les fichiers de configuration. Cela permet d'avoir des fichiers
de configuration qui calculent dynamiquement les paramètres en fonction
de la valeur du profil.
-N, --no-headers
Ne pas afficher les en-têtes
-c, --force
Continuer le traitement même en cas d'erreur
-r, --raw
Ne pas autoriser mysql à mettre en échappement certaines valeurs
retournées par le serveur. Par défaut, les transformations suivantes
sont effectuées:
newline --> \n
tab --> \t
nul --> \0
\ --> \\
-n, --nulls
Transformer dans le flux en sortie les valeurs NULL en chaines vides
-f, --input INPUT
Lire la requête depuis le fichier input au lieu de le lire depuis la
ligne de commande ou l'entrée standard. Ne pas spécifier cette option
ou utiliser '-' pour lire depuis l'entrée standard.
Cette option est ignorée si la requête est spécifiée parmi les
arguments.
}}}
{{{
mysqlloadcsv: Charger une table MySQL avec un fichier csv
USAGE
mysqlloadcsv [db.]table [fields...] [-- mysql options]
db est le nom de la base de données
table est le nom de la table à charger
fields est la liste des colonnes. Si cette valeur est spécifiée, il faudra
peut-être utiliser l'option -s pour ignorer le cas échéant la ligne des
en-têtes dans le fichier en entrée. Sinon, les colonnes à utiliser sont
calculées à partir du fichier en entrée.
Dans les données en entrées, qui doivent être en UTF8, les conversions suivantes
sont effectuées par MySQL:
\0 --> <caractère NUL>
\b --> <backspace>
\n --> <newline>
\r --> <carriage return>
\t --> <tab>
\Z --> Ctrl+Z
\N --> NULL
OPTIONS
-h, --host host
-P, --port port
-u, --user user
-ppassword
Informations de connexion à la base de données
-C, --config CONFIG
Prendre les informations de connexion depuis le fichier spécifié.
Le fichier doit être de la forme
host=HOST.TLD
#post=3306
user=USER
password=PASS
#dbtable=DB.TABLE
#fields=(FIELDS...)
# Il est possible aussi de spécifier DB et TABLE séparément:
#database=DB
#table=TABLE
Les variables port, dbtable et fields sont facultatives.
Les valeurs définies dans ce fichier sont prioritaires par rapport à
celles qui auraient été spécifiées sur la ligne de commande.
Utiliser password=--NOT-SET-- s'il faut se connecter sans mot de passe
Cette option peut être utilisée plusieurs fois, auquel cas les fichiers
sont chargés dans l'ordre.
--profile PROFILE
La variable $PROFILE est définie avec la valeur spécifiée avant de
sourcer les fichiers de configuration. Cela permet d'avoir des fichiers
de configuration qui calculent dynamiquement les paramètres en fonction
de la valeur du profil.
-f, --input INPUT
Fichier en entrée. Ne pas spécifier cette option ou utiliser '-' pour
lire depuis l'entrée standard.
-d, --auto-dbtable DB
Spécifier la base de données avec laquelle se connecter. De plus, si le
nom de la table n'est pas spécifié, prendre par défaut le nom de base du
fichier spécifié avec l'option -f
-s, --skip-lines NBLINES
Nombre de lignes à sauter dans le fichier en entrée
-n, --fake
Ne pas effectuer l'opération. Afficher simplement la commande SQL.
--run
Forcer le lancement de l'opération. Utiliser cette option avec -A pour
créer la table avec les paramètres analysés.
-T, --truncate
Vider la table avant d'effectuer le chargement
-L, --load-data
Charger les données avec la commande 'load data local'. C'est l'option
par défaut. Le fichier est transmis tel quel à MySQL.
-I, --insert-data
Charger les données en générant des commandes 'insert into'. L'effet est
en principe le même avec l'option -L (sauf que certains formats de date
exotiques seront correctement importés). Cette option peut aussi être
utilisée avec l'option -n pour générer une liste de commande à corriger
et/ou adapter.
-U, -k, --update-data KEY
Au lieu de charger de nouvelles données, essayer de mettre à jour la
table. KEY est le nom de la colonne qui est utilisée comme clé. Toutes
les autres colonnes sont les nouvelles données à mettre à jour. Si
aucune ligne ne correspond à une clé donnée, la mise à jour pour cette
ligne est ignorée.
Note: utiliser les options -T et -U ensemble n'a pas de sens, mais -T
est quand même honoré.
-Z, --null-value VALUE
Avec les options -I et -U, considérer que NULL est représenté par la
chaine spécifiée. Par défaut, utiliser \N
-z, --null-is-empty
Avec les options -I et -U, considérer que NULL est représenté par la
chaine vide. Cette option est équivalente à -Z ''
-t, --types [DEFAULT_TYPE,]FIELD:TYPE,...
Spécifier pour chaque champ mentionné le type de donnée à forcer. Le
type 'auto' signifie que le type est autodétecté. C'est la valeur par
défaut. Les autres types valides sont 'str', 'int' et 'date'
Cette option est ignorée avec l'option -L
-A, --analyse
Analyser les données et afficher une requête pour créer une table qui
pourrait contenir ces données.
Cette option implique --fake et affiche simplement la commande SQL.
Pour lancer la commande SQL générée, il faut ajouter l'option --run
APRES cette option
}}}
{{{
noerr: lancer une commande en supprimant la sortie d'erreur
}}}
{{{
noerror: lancer une commande en masquant son code de retour. le code de retour est toujours 0
}}}
{{{
noout: lancer une commande en supprimant la sortie standard
}}}
{{{
nutools: configurer ou afficher des informations sur nutools
USAGE
nutools [VERSION]
OPTIONS
-C, --configure
Faire la configuration pour l'utilisateur courant en appelant uenv -u
Avec cette option, l'option -l (ou --local-profiles) est aussi reconnue
et est passée directement à uenv
-v, --version
Afficher la version de nutools installée. C'est l'option par défaut
-c, --check
Calculer si la version installée correspond à la version spécifiée
-o, --oper OPERATOR
Spécifier l'opérateur à utiliser avec l'option --check (par défaut,
utiliser l'opérateur ge, qui permet de vérifier si la version minimum
spécifiée est installée)
--eq
--ne
--lt
--le
--gt
--ge
--same
--diff
Ces options sont des raccourcis. L'option '--OP' est équivalente à
'--check --op OP'
}}}
{{{
openurl: Ouvrir une URL dans un navigateur
USAGE
openurl <file.url|file.desktop|URL>
}}}
{{{
pdev: basculer sur une branche de développement
USAGE
pdev [FEATURE [SOURCE]]
pdev -m|-l|-d [FEATURE]
- Vérifier l'existence de la branche develop. La créer si nécessaire en la
basant sur [origin/]master.
- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un
commit ou un stash.
- Si FEATURE est spécifié, et si on n'est pas déjà sur cette branche, basculer
vers cette nouvelle branche. S'il s'agit d'une nouvelle branche, la baser sur
la branche SOURCE, qui vaut par défaut develop
- Si FEATURE n'est pas spécifié, basculer sur develop s'il s'agit de la seule
solution, sinon afficher un menu pour choisir la branche de destination.
OPTIONS
-C, --projdir PROJDIR
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
on travaille dans le répertoire courant et on laisse git trouver le
répertoire de base du projet. Avec cette option, le répertoire courant
est modifié avant de lancer les commandes git.
-O, --origin ORIGIN
Spécifier le nom de l'origine. Par défaut, utiliser 'origin'
-o, --offline
En cas de création d'une branche, ne pas pousser vers l'origine; ne pas
tenter le cas échéant de traquer la branche dans l'origine; ne pas
supprimer une branche dans l'origine. Cette option est automatiquement
activée si la variable UTOOLS_VCS_OFFLINE est définie.
--online
Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online
--sync
Faire un certain nombre d'opération pour 'corriger' le dépôt local: pour
chacune des branches distantes, vérifier qu'il existe une branche locale
qui la traque, et pour chaque feature branche locale, vérifier qu'il
existe une branche distante associée. Cette option nécessite --online
-s, --squash COMMIT_MSG
Si la branche actuelle est une feature branch, la merger comme un seul
commit avec le message COMMIT_MSG dans develop puis la supprimer. Puis
basculer sur la branche develop.
Cette option ne devrait pas être utilisée avec -k, puisque bien que les
modifications soient mergées, la branche elle-même n'est pas considérée
comme mergée. Les résultats sont donc indéfinis si la branche est mergée
à plusieurs reprises.
-b, --rebase
Si la branche actuelle est une feature branch, lancer 'git rebase -i'
sur la feature branch. Cela permet de réordonner les commits pour
nettoyer l'historique avant de fusionner la branche avec -m
Cette option devrait le cas échéant être utilisée immédiatement avant -m
ou alors il faut forcer le push et communiquer avec l'équipe sur le fait
que la branche de feature a été rebasée.
-m, --merge
Si la branche actuelle est une feature branch, la merger dans develop
puis la supprimer. Puis basculer sur la branche develop.
--merge-log
Ajouter un résumé des modifications sur la feature branch en ajoutant le
log en une ligne de chaque commit dans le message du merge. Cette option
n'est en principe pas nécessaire puisque 'prel -um' intègre la liste des
commits dans CHANGES.txt
-k, --keep
Avec l'option -m, ne pas supprimer une feature branch après l'avoir
fusionnée dans develop. Cela permet d'intégrer les modifications petit à
petit.
--delete
Supprimer une feature branch, à condition qu'elle aie déjà été
entièrement fusionnée dans la branch develop
--force-delete
Supprimer une feature branch, même si elle n'a pas encore été fusionnée
dans la branche develop
-l, --log
-d, --diff
Afficher les modifications entre deux branches. L'option --log affiche
les modifications dans l'ordre alors que --diff affiche les différences
sous forme de diff. Les deux options peuvent être combinées et ont
l'effet de 'git log -p'
La branche comparée, s'il elle n'est pas spécifiée, est par défaut la
branche courante. S'il s'agit d'une feature branch, elle est comparée à
develop. S'il s'agit de la branche develop, elle est comparée à master.
}}}
{{{
prel: basculer sur une branche de release
USAGE
prel -u [SOURCE]
prel -c [RELEASE [SOURCE]]
prel -m|-l|-d [RELEASE]
- Vérifier s'il n'y a pas de modifications locales. Sinon, proposer de faire un
commit ou un stash.
- Avec l'option -c, s'il existe une branche de release, proposer de basculer
vers elle ou sur la branche master. Sinon, basculer sur la branche master.
- Avec l'option -u, proposer ou fixer une branche de release à créer. Si elle
existe déjà, basculer vers elle. Sinon, la créer en la basant sur SOURCE, qui
vaut par défaut develop
OPTIONS
-C, --projdir PROJDIR
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
on travaille dans le répertoire courant et on laisse git trouver le
répertoire de base du projet. Avec cette option, le répertoire courant
est modifié avant de lancer les commandes git.
-O, --origin ORIGIN
Spécifier le nom de l'origine. Par défaut, utiliser 'origin'
-o, --offline
En cas de création d'une branche, ne pas pousser vers l'origine; ne pas
tenter le cas échéant de traquer la branche dans l'origine; ne pas
supprimer une branche dans l'origine. Cette option est automatiquement
activée si la variable UTOOLS_VCS_OFFLINE est définie.
--online
Annuler l'effet de la variable UTOOLS_VCS_OFFLINE: forcer le mode online
-c, --checkout
Basculer vers une branche de release existante. C'est l'option par
défaut. Si aucune branche de release n'existe, basculer vers master
-u, --update
Préparer une nouvelle release. Utiliser une des options -x, -z ou -p
pour spécifier le type de release à préparer. Si la branche qui serait
créée pour le type de release existe déjà, basculer vers cette branche.
S'il faut la créer, la baser sur la branche SOURCE, qui vaut par défaut
develop
--menu
-x, --major
-z, --minor
-p, --patchlevel
Utilisé avec l'option -u, soit afficher un menu pour choisir la version
de la nouvelle release (par défaut), soit préparer respectivement une
release majeure, mineure, ou pour correction de bug.
-v-OPT
Avec l'option -u, spécifier une option de pver permettant de choisir la
version de la nouvelle release. Les options supportées sont -v, -l, -a,
-b, -r et -R. Par exemple, si la version actuelle sur la branche master
est 0.2.3, les options '-uz -v-lbeta' permettent de préparer la release
0.3.0-beta
En principe, cette option n'a pas à être utilisée, puisque dans une
branche de release, on peut faire vivre les versions de pré-release
jusqu'à la release finale. Ainsi, la branche de release est nommée
d'après la version finale, mais le projet peut recevoir une version de
pré-release incrémentale.
-w, --write
Si une nouvelle branche est créée avec -u, mettre à jour le fichier
VERSION.txt avec pver. C'est l'option par défaut.
-n, --no-write
Si une nouvelle branche est créée avec -u, NE PAS mettre à jour le
fichier VERSION.txt avec pver. Utiliser cette option si la mise à jour
du numéro de version doit être faite d'une manière particulière.
-e, --edit
Editer le fichier CHANGES.txt autogénéré par -u -w
Cette option est surtout utile si -m est utilisé avec -u, pour donner la
possibilité de corriger la liste des modifications avant leur
enregistrement définitif.
-m, --merge
Si la branche actuelle est une branche de release, ou s'il existe une
branche de release, la merger dans master, puis dans develop, puis la
supprimer. Puis basculer sur la branche master.
S'il n'existe pas de branche de release, proposer de fusionner les
modifications de la branche develop dans la branche master, sans
préparer de branche de release au préalable.
--delete
Supprimer une branche de release, à condition qu'elle aie déjà été
entièrement fusionnée dans la branch master
--force-delete
Supprimer une branche de release, même si elle n'a pas encore été
fusionnée dans la branche master
-s, --summary
Afficher la liste des différences entre la branche develop et la branche
master, comme elle serait générée par les options -u -w pour le fichier
CHANGES.txt
-l, --log
Afficher les modifications actuellement effectuée dans la branche de
release par rapport à develop.
-d, --diff
Afficher les modifications actuellement effectuée dans la branche de
release par rapport à develop, sous forme de diff.
}}}
{{{
pver: gérer des numéros de version selon les règles du versionage sémantique v2.0.0 (http://semver.org/)
USAGE
pver [options]
OPTIONS
-f, --file VERSIONFILE
Gérer le numéro de version se trouvant dans le fichier spécifié. Le
fichier est créé si nécessaire. C'est l'option par défaut si un fichier
nommé VERSION.txt se trouve dans le répertoire courant.
-e, --maven POMFILE
Gérer le numéro de version se trouvant dans le fichier pom.xml spécifié.
Le fichier DOIT exister. C'est l'option par défaut si un fichier nommé
pom.xml se trouve dans le répertoire courant.
-F, --file-string VERSIONFILE
Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui
vaut par défaut VERSION.txt)
-g, --git-string [branch:]VERSIONFILE
Prendre pour valeur de départ le contenu du fichier VERSIONFILE (qui
vaut par défaut VERSION.txt) dans la branche BRANCH (qui vaut par défaut
master) du dépôt git situé dans le répertoire courant.
-s, --string VERSION
Prendre pour valeur de départ le numéro de version spécifié
--show
Afficher le numéro de version. C'est l'action par défaut
--allow-empty
Supporter que la version puisse ne pas être spécifiée ni trouvée. Dans
ce cas, ne pas assumer que la version effective est 0.0.0
Avec --show et --update, ne rien afficher si la version est vide.
--check
Vérifier que le numéro de version est conforme aux règles du versionage
sémantique
--convert
--no-convert
Activer (resp. désactiver) la conversion automatique. Par défaut, si la
version est au format classique 'x.z[.p]-rDD/MM/YYYY', elle est
convertie automatiquement au format sémantique x.z.p+rYYYYMMDD
--eq VERSION
--ne VERSION
--lt VERSION
--le VERSION
--gt VERSION
--ge VERSION
--same VERSION
--diff VERSION
Comparer avec la version spécifiée. Les opérateurs --eq, --ne, --lt,
--le, --gt, et --ge ignorent l'identifiant de build (comme le demande la
règle du versionage sémantique). Les opérateurs --same et --diff
comparent aussi les identifiants de build.
-v, --set-version VERSION
Spécifier un nouveau numéro de version qui écrase la valeur actuelle.
Cette option ne devrait pas être utilisée en temps normal parce que cela
va contre les règles du versionage sémantique.
--prel
Spécifier un nouveau numéro de version qui écrase la valeur actuelle. Le
numéro de version est obtenu à partir du nom de la branche git courante,
qui doit être de la forme release-VERSION
-u, --update
Mettre à jour le numéro de version.
--menu
Afficher un menu permettant de choisir le composant de la version à
incrémenter
-x, --major
Augmenter le numéro de version majeure
-z, --minor
Augmenter le numéro de version mineure. C'est la valeur par défaut.
-p, --patchlevel
Augmenter le numéro de patch
-l, --prelease ID
Spécifier un identifiant de pré-release, à ajouter au numéro de version.
-a, --alpha
-b, --beta
-r, --rc
Spécifier une pré-release de type alpha, beta, ou rc. Si la version est
déjà dans ce type, augmenter la dernière valeur numérique des composants
de l'identifiant, e.g. alpha deviant alpha.1, beta-1.2 devient beta-1.3,
rc1 devient rc2
XXX ces fonctions ne sont pas encore implémentées
-R, --final, --release
Supprimer l'identifiant de prérelease
-m, --metadata ID
Spécifier un identifiant de build, à ajouter au numéro de version.
-M, --vcs-metadata
Spécifier l'identifiant à partir de la révision actuelle dans le
gestionnaire de version. Note: pour le moment, seul git est supporté.
--add-metadata ID
Ajouter l'identifiant spécifié à la valeur actuelle, au lieu de la
remplacer. Séparer l'identifiant de la valeur précédente avec un '.'
}}}
{{{
pz: faire une archive du projet
USAGE
pz
OPTIONS
-C, --projdir PROJDIR
Spécifier le répertoire de base du projet qui est dans git. Par défaut,
on travaille dans le répertoire courant et on laisse git trouver le
répertoire de base du projet. Avec cette option, le répertoire courant
est modifié avant de lancer les commandes git.
-d, --destdir DESTDIR
Spécifier le répertoire dans lequel générer l'archive. Par défaut,
prendre le répertoire parent du répertoire de base du dépôt.
}}}
{{{
Usage: reptyr [-s] PID
reptyr -l|-L [COMMAND [ARGS]]
-l Create a new pty pair and print the name of the slave.
if there are command-line arguments after -l
they are executed with REPTYR_PTY set to path of pty.
-L Like '-l', but also redirect the child's stdio to the slave.
-s Attach fds 0-2 on the target, even if it is not attached to a tty.
-h Print this help message and exit.
-v Print the version number and exit.
-V Print verbose debug output.
}}}
{{{
rmtildes: supprimer les fichiers *~ dans le répertoire courant
USAGE
rmtildes [dir [glob]]
Par défaut, dir==. et glob==*~
}}}
{{{
rruns: Déploiement distant avec runs
USAGE
rruns [-h hosts] [-T tmproot] rscriptname name=value...
rruns [-h hosts] [-T tmproot] @recipe name=value...
rruns [-h hosts] [-T tmproot] -f rscript name=value...
rruns [-h hosts] [-T tmproot] -r recipe name=value...
Lancer ce script sans argument (hors options) est équivalent à le lancer avec
l'argument @default
OPTIONS
-C 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
ce n'est pas possible de se connecter par mot de passe avec le user root
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
il est possible de faire la configuration avec '--configure root'. La
commande serait alors
rruns -h user@host --configure root
-T 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
Spécifier le programme à utiliser pour la connection par ssh.
-h host
-h @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
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
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
hostsfile, à raison d'un hôte par ligne.
Si cette option n'est pas spécifiée, et que le répertoire courant est
dans un des répertoires de $RUNSHOSTSPATH, sélectionner l'hôte
correspondant. Sinon, l'utilisateur doit saisir l'hôte distant de façon
interactive.
-f RSCRIPT
Lancer le script individuel spécifié au lieu de chercher dans les
répertoires $RUNS{SCRIPTS,HOSTS}PATH
-r RECIPE
Lancer les scripts spécifiés dans le fichier de recettes individuel
spécifié.
-z Forcer la réinstallation des scripts qui se basent sur shouldrun/setdone
-o OUTPUT
Générer l'archive à lancer sur l'hôte distant au lieu de faire le
déploiement. Si plusieurs hôtes sont spécifiés, OUTPUT est considéré
comme un nom de base auquel est ajouté le nom de l'hôte sur lequel
l'archive doit être déployée.
--init
--no-init
Forcer (resp. empêcher) la création des répertoires d'hôte correspondant
aux hôtes spécifiés. Par défaut, la création des répertoires d'hôte est
effectuée uniquement si ce script est lancé sans argument.
--sysinfos
Après un déploiement réussi sur l'hôte distant, inscrire si ce n'est
déjà fait le résultat de la commande usysinfos dans le fichier
sysinfos.conf du répertoire d'hôte.
Cette option est automatiquement activée si ce script est lancé sans
argument (hors options).
}}}
{{{
ruinst: Déploiement distant avec uinst
USAGE
ruinst [-h host] [-T tmproot] <file|archive|dir> [-- options de uinst]
note: à cause d'une limitation de makeself, les options de uinst ne devraient
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é
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
ce n'est pas possible de se connecter par mot de passe avec le user root
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
il est possible de faire la configuration avec '--configure root'. La
commande serait alors
ruinst -h user@host --configure root
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:
ruinst -h user@host --configure root --uses-su
-T 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
Spécifier le programme à utiliser pour la connection par ssh.
-h hosts
-h @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
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
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
hostsfile, à raison d'un hôte par ligne.
}}}
{{{
rumount: démonter un système de fichier récursivement
USAGE
rumount 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.
}}}
{{{
runs: Lancer un script avec le protocole runs
USAGE
runs [options] rscriptname name=value...
runs [options] @recipe name=value...
runs [options] -f rscript name=value...
runs [options] -r recipe name=value...
OPTIONS
Configuration
--init
--verify
Vérifier le nom d'hôte et créer si nécessaire le répertoire d'hôte
correspondant à l'hôte courant ou à l'hôte spécifié avec l'option -h
Avec --verify, la création du répertoire d'hôte n'est pas effectuée.
--sysinfos DATA
Avec l'option --init, initialiser le fichier sysinfos.conf avec DATA, si
le fichier n'a pas déjà été provisionné. Sans cette option, un fichier
vide avec des commentaires est créé à la place.
--create RSCRIPT
Créer un modèle de script avec le nom donné.
Avec l'option -h, le script est créé dans le répertoire d'hôte
correspondant à l'hôte spécifié
Gestion des scripts
-s Forcer l'exécution du script avec l'utilisateur root si ce n'est pas
déjà le cas
-f RSCRIPT
Lancer le script individuel spécifié au lieu de chercher dans les
répertoires de $RUNSSCRIPTSPATH
-r RECIPE
Lancer les scripts spécifiés dans le fichier de recettes individuel
spécifié.
-h HOSTNAME[.DOMAIN]
Spécifier que les scripts sont destinés à être lancés sur l'hôte
spécifié. Les scripts sont alors aussi cherchés dans les répertoires
{$RUNSHOSTSPATH}/$hostname.$domain (par défaut) et
{$RUNSHOSTSPATH}/$domain/$hostname (le cas échéant)
L'option --host est équivalente, sauf que son argument est facultatif et
que sa valeur par défaut est l'hôte courant, soit sulfure
--list
Afficher la liste des scripts qui sont disponibles. Avec l'option -h,
inclure aussi les scripts spécifiques à cet hôte.
Avec cette option, les arguments supplémentaires agissent comme des
filtres (regexp utilisée avec l'opérateur == de la commande [[). Les
noms des scripts doivent valider au moins un filtre.
--info
Afficher la la description du script et la valeur de chaque variable
définies
--desc-only
Afficher seulement la description du script
-z Forcer la réinstallation des scripts qui se basent sur shouldrun/setdone
}}}
{{{
runsconfig: Gérer un répertoire d'hôte de runs
USAGE
runsconfig -c [host [destdir]]
runsconfig -t -- args...
OPTIONS
-c, --create
Créer un nouveau répertoire de configuration pour un hôte
-d, --destdir DESTDIR[=runs]
Nom du répertoire local de configuration.
-t, --template [OPT]
Gérer les fichiers du répertoire local avec templatectl. La valeur de
cette option est utilisée comme argument court pour l'invocation de
templatectl, e.g
runsconfig -tm args
est équivalent à
templatectl -m args
Les arguments qui restent sont passés tels quels à templatectl
Les options courantes de templatectl -l, -v, -m, -L sont disponibles
directement
--help-template
Afficher l'aide concernent la gestion des templates.
Equivalent à -t -- --help
-h, --host HOST
Spécifier l'hôte. Equivalent à -v host=HOST
}}}
{{{
runsmod: récupérer des dépôts git à usage de runs
USAGE
runsmod [options] [-h host] [modules...]
Tous les dépôts spécifiés dans la configuration sont récupérés. Si des modules
sont spécifiés, les dépôts correspondants sont récupérés aussi. Avec l'option
-h, des dépôts spécifiques à l'hôte peuvent éventuellement être récupérés en
plus.
OPTIONS
-c, --config CONFIG
Spécifier un fichier de configuration à charger au lieu de la valeur par
défaut ~/etc/default/runs
--prod
--devel
Forcer un mode de sélection des urls. En mode production, préférer pour
le clonage les urls de production, qui sont en principe accessibles sans
authentification et en lecture seule. En mode développement, préférer
pour le clonage les urls de développement, qui sont en principe
accessibles par clé ssh et en lecture/écriture
--no-fetch
Ne rien récupérer. Utile avec --update-repolist
-N, --no-host
-A, --all-hosts
-H, -h, --host HOST
-T, --this-host
Options permettant de spécifier l'hôte pour la récupération de dépôts
spécifiques.
--no-host demande explicitement à ce qu'aucun hôte ne soit spécifié
--all-hosts sélectionne tous les dépôts spécifiques
--host récupère uniquement les dépôts pour l'hôte spécifié
--this-host équivaut à --host sulfure
L'option par défaut est --this-host en mode production et --all-hosts en
mode développement
--update-repolist
Forcer la mise à jour de la liste des dépôts. En principe, cette mise à
jour n'est pas faite plus d'une fois par période de 24 heures.
-0, --offline
-n, --no-pull
-u, --pull
Spécifier le mode opératoire pour la récupération des dépôts.
En mode --offline, ni clone ni pull ne sont autorisés. Le module doit
avoir déjà été cloné.
En mode --no-pull, seul le clonage est autorisé, e.g. le dépôt est
cloné si ce n'est pas déjà le cas.
En mode --pull, cloner le dépôt si ce n'est pas déjà le cas, ou le
mettre à jour le dépôt avant de l'utiliser s'il avait déjà été cloné.
Par défaut, utiliser --pull en mode production et --no-pull en mode
développement.
-i, --identity IDENTITY_FILE
Spécifier le fichier depuis lequel lire la clé privée pour les
connexions par ssh.
-o, --output OUTPUT
Spécifier un fichier dans lequel écrire des définitions de variables,
notamment REPODIRS qui reçoit la liste des chemins des dépôts qui ont
été récupérés. De plus, les variables RUNSSCRIPTSPATH, RUNSMODULESPATH
et RUNSHOSTSPATH sont définies.
-a, --append-output
Ajouter au fichier OUTPUT au lieu de l'écraser
}}}
{{{
rwoinst: Déploiement distant avec woinst
USAGE
rwoinst [-H host] [-T tmproot] <file|archive|dir>... [-- options de woinst]
OPTIONS
-C 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
ce n'est pas possible de se connecter par mot de passe avec le user root
sur l'hôte distant, et qu'il existe un user sudoer sur l'hôte distant,
il est possible de faire la configuration avec '--configure root'. La
commande serait alors
rwoinst -H user@host --configure root
-T 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
Spécifier le programme à utiliser pour la connection par ssh.
-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
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
}}}
{{{
USAGE:
sqlcsv [query]
query est la requête SQL à exécuter. Si query n'est pas spécifiée ou si elle
vaut '-', la requête SQL est lue sur l'entrée standard, ou depuis un
fichier si l'option -f est spécifiée.
DEMARRAGE
Au démarrage, les répertoires de configuration (utilisateur ~/.sqlcsv et système
/etc/sqlcsv) sont analysés. Les fichiers *.jar situés dans ces répertoires sont
ajoutés au CLASSPATH. La présence de certains fichiers est testée pour activer
éventuellement les logs détaillés.
OPTIONS
-C, --config CONFIG
Prendre les informations de connexion depuis le fichier de propriété
spécifié. Pour l'identifiant CONN, la propriété 'CONN.url' doit exister
dans ce fichier avec la valeur de l'url jdbc de connexion. De plus, les
propriétés 'CONN.user' et 'CONN.password' contiennent respectivement si
nécessaire le nom et le mot de passe de connexion. La propriété
'loglevel', si elle existe, est utilisée pour configurer le niveau
d'affichage des logs, comme avec l'option --loglevel
Si cette option n'est pas spécifiée, un fichier nommé sqlcsv.properties
est recherché dans l'ordre: dans le répertoire courant, dans le
répertoire de configuration utilisateur, puis dans le répertoire de
configuration système. Si le fichier est trouvé, il est chargé
automatiquement.
-l, --conn CONN
Spécifier l'identifiant (ou l'url) de connexion. Cette information est
obligatoire. Si cette option n'est pas fournie, il faut spécifier un
fichier de configuration avec l'option -C dans lequel *une seule*
propriété 'CONN.url' est définie.
-u, --user USER
-p, --password PASSWORD
Spécifier un nom de connexion et un mot de passe si l'url ne le fournit
pas. Ces valeurs ont la priorité sur les valeurs éventuellement déjà
présentes dans le fichier de propriété.
-f, --input INPUT
Lire la requête depuis le fichier INPUT au lieu de la lire depuis la
ligne de commande ou l'entrée standard. Ne pas spécifier cette option ou
utiliser '-' pour lire depuis l'entrée standard. Cette option est
ignorée si la requête est fournie sur la ligne de commande.
-o, --output OUTPUT
Ecrire le résultat dans le fichier OUTPUT. Utiliser '-' pour spécifier
la sortie standard (c'est la valeur par défaut). S'il y a plusieurs
requêtes et que le fichier de sortie n'est pas la sortie standard,
ajouter un numéro incrémental au nom du fichier en sortie pour chaque
requête. Sinon, il est possible de spécifier plusieurs fois cette option
pour nommer les fichiers correspondant à chaque requête.
-t, --autocommit
Activer le mode autocommit
-c, --ignore-io-error
Continuer le traitement même en cas d'erreur du système de fichiers.
Cependant le traitement s'arrête et la transaction est annulée si une
autre erreur se produit.
-y, --ignore-any-error
Continuer le traitement même en cas d'erreur quelconque.
-n, --no-headers
Ne JAMAIS inclure les en-têtes dans la sortie, même avec l'option -h
-a, --append
Ajouter le résultat au fichier OUTPUT au lieu de l'écraser.
-A, --auto-na
Activer les option -n -a si le fichier OUTPUT existe et qu'il est non
vide. Le test n'est effectué que pour le premier fichier spécifié.
-s, --same-output
Utiliser le même fichier pour écrire le résultat de toutes les requêtes.
Normalement, un numéro incrémental est ajouté au fichier en sortie si
plusieurs requêtes sont spécifiées. Si les en-têtes sont les mêmes,
ajouter le résultat au fichier directement à la suite. Sinon, sauter une
ligne blanche et afficher les nouveaux en-têtes.
-h, --force-headers
En cas d'écriture du résultat de plusieurs requêtes dans un même
fichier, ne pas tenter de concaténer les résultats même si les en-têtes
sont les mêmes.
--uc-output
Ajouter dans la sortie les résultat de toutes les requêtes, pas
seulement celles de type DQML
--loglevel LOGLEVEL
Spécifier le niveau de logs à afficher. Les valeurs valides sont à
choisir parmi ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, ERROR
La présence de certains fichiers dans les répertoires de configuration
utilisateur ou système configure les logs avant que les options de la
ligne de commande ne soient analysés: un fichier DEBUG fait démarrer
l'application avec le niveau de log ALL ce qui permet de voir les logs
concernant le chargement des jar. Un fichier SQL_DEBUG permet d'activer
la trace de DriverManager. Exemple:
mkdir -p ~/.sqlcsv && touch ~/.sqlcsv/{DEBUG,SQL_DEBUG}
}}}
{{{
twsync: synchroniser un répertoire de wiki avec un tiddlywiki
USAGE
twsync [options]
Un répertoire de wiki est un répertoire où chaque page est contenu dans un
fichier avec l'extension .twp
Un tiddlywiki est un fichier html contenant le code de TiddlyWiki et les données
associées.
OPTIONS
-d wikidir
-f wikifile
Spécifier le répertoire de wiki et le tiddlywiki à traiter. Par défaut,
il s'agit de wiki.html dans le répertoire courant.
-u Importer les pages de wikidir dans le tiddlywiki. Utiliser cette action
quand les pages de wikidir sont modifiées et qu'il faut mettre à jour le
tiddlywiki.
Il s'agit de l'action par défaut
--force
Forcer l'importation des pages même si les tiddlers correspondant sont
plus récents dans le tiddlywiki
Forcer aussi la regénération de wikifile même si aucune modification n'a
été détectée
-e Exporter les tiddlers du tiddlywiki vers wikidir. Utiliser cette action
quand le tiddlywiki a été modifié, et qu'il faut synchroniser wikidir
avec les dernières modifications.
-U Mettre à jour le fichier wikifile avec la dernière version de tiddlywiki
située dans ~/wop/modules/nutools/lib/tiddlywiki/empty.html
}}}
{{{
uawk: wrapper pour des outils implémentés en awk
USAGE
uawk TOOL args...
Les noms d'outils valides sont: awkrun awkcsv grepcsv awkfsv2csv mergecsv sortcsv dumpcsv printcsv
Utiliser l'option --help pour obtenir de l'aide sur chacun des outils
}}}
{{{
ubackup: faire une sauvegarde des fichiers
USAGE
ubackup [options]
OPTIONS
-l Lister les profils de sauvegarde disponibles.
-p Spécifier le profil de sauvegarde à effectuer. Par défaut, toutes les
sauvegardes sont effectuées.
-u USER
Faire le sauvegarde pour l'utilisateur $USER. Cette option n'est valide
que pour l'utilisateur root.
-n Afficher ce qui doit être fait plutôt que de le faire
-H Arrêter la machine après une sauvegarde REUSSIE.
}}}
{{{
ucalc: Afficher une valeur dans plusieurs unités
USAGE
ucalc value
Sans suffixe, la valeur est exprimée en octets. Sinon, elle peut être suffixée
pour spécifier l'unité dans laquelle est exprimée la valeur:
K,M,G,T -- Kibi (1024), Mibi (1024^2), Gibi (1024^3), Tebi (1024^4)
k,m,g,t -- Kilo (1000), Mega (1000^2), Giga (1000^3), Tera (1000^4)
s -- secteurs de 512 octets
S -- secteurs de 2048 octets
p -- pages de 4096 octets
c -- cylindres (si l'option -c est spécifiée)
b -- octets
OPTIONS
-u UNIT
Spécifier l'unité de value. Le suffixe qui est éventuellement sur value
est ignoré.
-o UNIT
Spécifier l'unité en sortie. Par défaut, afficher la valeur dans toutes
les unités supportées.
-c VALUE
Taille d'un cylindre en octets, pour permettre l'affichage des valeurs
en cylindres
}}}
{{{
uconf: Activer ou désactiver un paramètre dans un fichier de configuration
USAGE
uconf [options] config name[=value]...
OPTIONS
-e
Activer le paramètre (par défaut). Si le paramètre existe, mais est
commenté, il est décommenté. Si une valeur est spécifiée pour le
paramètre, le paramètre est modifié dans le fichier en conséquence.
-q
Cette option s'utilise avec l'option -e et le type shell. Elle permet
de s'assurer que les valeurs ayant des espaces et/ou des caractères
spéciaux sont quotées
-d
Désactiver le paramètre. Le paramètre est commenté s'il existe dans le
fichier
-a
Ajouter une valeur à la variable, ou un paramètre avec cette valeur
(suivant le type de fichier de configuration)
-A
Ajouter une valeur au tableau, ou un paramètre avec cette valeur
(suivant le type de fichier de configuration)
-t TYPE
Type de fichier de configuration. TYPE peut être sh (par défaut), apache
ou mysql.
shell
les paramètres sont de la forme 'name=value', et les commentaires
débutent par '#'. Ce type peut être utilisé pour tous les fichiers
ayant ces caractéristiques, dont les fichiers de script shell
apache
les paramètres sont de la forme 'name value', et les commentaires
débutent par '#'. Ce type peut être utilisé pour tous les fichiers
ayant ces caractéristiques, dont les fichiers de configuration
apache
mysql, php
les paramètres sont dans des sections nommées de la forme [section],
sont de la forme 'name=value', et les commentaires débutent par '#'
ou ';'
Ce type peut être utilisé pour tous les fichiers ayant ces
caractéristiques, dont les fichiers de configuration de mysql et de
php. Avec ce type, la section est obligatoire.
-s SECTION
Avec le type mysql, préciser la section dans laquelle inscrire le
paramètre. Attention! La section DOIT exister, elle n'est pas créée
automatiquement.
}}}
{{{
ucrontab: Ajouter/Supprimer une ligne dans crontab
USAGE
ucrontab [options] ctline
OPTIONS
-a Ajouter la ligne dans le fichier crontab (par défaut)
-r Enlever la ligne dans le fichier crontab
-u user
Spécifier l'utilisateur pour lequel on modifie crontab. Par défaut,
modifier le crontab de root
-H host:hosts...
Modifier le crontab sur les hôtes distants spécifiés. Avec l'hôte '.' ou
'localhost', la modification est faite sur l'hôte local
Si l'action est -a, un script 'undo-ucrontab.sh' est créé dans le
répertoire courant, qui annule la planification. Il est possible de
lancer ce script le lendemain pour enlever les planifications
installées.
ctline
Ligne de crontab de la forme 'minutes hours days months dows command'
Si la ligne est de la forme halt[@hh:mm], la commande 'shutdown -h now'
est planifiée pour le LENDEMAIN à hh:mm. si hh:mm n'est pas spécifié,
l'arrêt est planifié pour 7:00
-t hh:mm
Ignorer la partie 'minutes hours days months dows' de ctline, et la
remplacer par une planification à hh:mm le LENDEMAIN.
--dom dayOfMonth
--month month
Spécifier respectivement le jour du mois et le mois (1-12) auquel faire
la planification. Par défaut, les planifications sont effectuées pour le
LENDEMAIN. Il est conseillé de spécifier les deux arguments si le jour
doit être fixé.
-s cmdfile
Spécifier un fichier, dont le contenu est utilisé pour générer le script
qui est planifié. Le fichier doit contenir l'ensemble des commandes à
exécuter. Le script est modifié pour s'autodétruire à la fin de son
exécution. Si ce comportement n'est pas souhaité, il faut rajouter la
commande 'exit 0' à la fin.
-S cmd
Comme -s, mais spécifier le contenu du fichier directement sur la ligne
de commande.
-f hostsfile
Spécifier un fichier qui contient la liste des hôtes sur lesquels faire
les planifications.
Les options -s, -S, -H, -d, -n sont ignorées. L'option --add est valide
jusqu'au premier @group du fichier. Voici le format de ce fichier:
Un groupe d'hôte débute par une ligne de la forme '@group:adelay:gdelay'
- adelay est le nombre de minutes à laisser passer entre les hôtes du
groupe (par défaut 1)
- gdelay est le nombre de minutes à laisser passer après le traitement
du groupe (par défaut 15)
Les autres lignes sont des hôtes sur lequels planifier l'opération, de
la forme 'host:cmd'
- host est un nom d'hôte pleinement qualifié, sur lequel il est possible
de se connecter par clé.
- cmd est une description de la commande à lancer pour effectuer
l'opération planifiée. Utiliser la syntaxe '<script' pour prendre le
contenu du fichier de script spécifié. Le script est copié dans un
fichier temporaire sur l'hôte, et se supprime après son
lancement. Sinon, la commande spécifiée est utilisée telle quelle. Si
cmd n'est pas spécifié, prendre la commande par défaut donnée par
ctline
Les lignes vides et commençant par '#' sont ignorées
La commande '@include:file' permet d'inclure un autre fichier
-d Activer l'incrémentation automatique des heures de planification entre
chaque hôte. Ceci permet par exemple de planifier l'arrêt d'un certain
nombre de machines dans un ordre précis, en horaire décalé.
Cette option est activée par défaut si ctline==halt[@time]
-n Désactiver l'incrémentation automatique des heures de planification.
--add ADELAY
Spécifier le nombre de minutes entre chaque hôte pour l'incrémentation
automatique des heures de planification. Par défaut, il y a 1 minute
entre chaque hôte.
--us undo-script
Spécifier le nom du script qui annule la planification. Utiliser ""
pour désactiver cette fonctionnalité.
--fake
Afficher simplement les modifications qui doivent être effectuées.
}}}
{{{
udaemon.cgo: start a program as a daemon
USAGE
udaemon.cgo /path/to/prog [args...]
OPTIONS
-d DESTDIR
Change to DESTDIR instead of "/" before starting the program
}}}
{{{
udir: gérer les variables de répertoire
USAGE
udir [options] [dir [name=value...]]
Par défaut, mettre à jour les variables du répertoire avec les définitions
données. Attention! Les définitions sont insérées *telles quelles* dans le
fichier. Par exemple, pour définir une variable qui contient des espaces,
on pourra faire:
udir /path/to/dir 'var="value with spaces"'
pour définir un tableau:
udir /path/to/dir 'array=(first second)'
OPTIONS
-i, --show-desc
-n, --show-note
Afficher la description du répertoire. C'est l'action par défaut si ce
script est lancé *sans argument*
-d, --dump
Afficher toutes les variables définies pour le répertoire 'dir'.
-x, --eval 'CMDS;...'
Exécuter les commandes dans le contexte des variables définies pour le
répertoire.
-e, --edit
Editer les variables du répertoire
--local-vars
Avec -d, ajouter des directives 'local' aux définitions de variables
-A, --all-parents
Avec -d et -x, considérer les variables de tous les répertoires parents
jusqu'à la racine. Pour ne considérer que les variables du répertoire
spécifié (par défaut), utiliser --local-only
--help-vars
Afficher une descriptions des variables spécifiques aux outils de nutools
}}}
{{{
udist: gestion d'une distribution upstream
Des fichiers de configuration (par exemple) sont distribués par un partenaire,
et il faut maintenir des modifications locales, tout en acceptant les mises à
jour provenant de l'upstream. Ce script aide à maintenir un tel scénario.
En général, la distribution upstream identifie les fichiers modifiables en leur
donnant une extension particulière, par exemple 'file.origine' ou 'file.default'
La liste des extensions reconnues est spécifiée avec l'option -s. Lors de leur
intégration dans le répertoire local, ces fichiers sont copiés sans cette
extension.
Terminologie: Les fichiers pour lesquels il faut maintenir une version locale
sont appelés 'fichiers locaux', qu'ils viennent de la distribution upstream ou
non. Les autres fichiers qui proviennent de la distribution sont appelés
'fichiers upstream'.
USAGE
udist cmd [options]
OPTIONS COMMUNES
-s .EXT
Ajouter une extension à la liste des extensions reconnues comme contenu
original modifiable dans la distribution upstream. Par défaut, les
extensions suivantes sont reconnues:
.udist .origine .default
Cette option peut être utilisée autant de fois que nécessaire.
--clear-origexts
Supprimer la liste par défaut des extensions origines. Cette option doit
être spécifiée avant l'option -s pour construire une nouvelle liste.
La liste des extensions ne doit pas être vide. Si c'est le cas, elle est
modifiée pour contenir l'unique élément (.udist)
-d WORKDIR
Spécifier le répertoire de travail. Par défaut, la racine du répertoire
de travail est cherchée à partir du répertoire courant.
--help
Afficher l'aide détaillée de la commande spécifiée
COMMANDES
init [WORKDIR [ARCHIVE]]
Initialiser un répertoire de travail pour contenir une distribution
upstream
upstream-new, new SRCDIR|ARCHIVE [WORKDIR]
Intégrer une nouvelle distribution upstream.
Les nouveaux fichiers sont copiés tout de suite dans le répertoire de
travail. Par contre, les modifications ne sont intégrées qu'avec la
commande patch
upstream-clear, clear [WORKDIR]
Supprimer tous les fichiers non modifiés de l'upstream.
local-create, create FILE
Créer et/ou identifier FILE comme une modification locale par rapport à
l'upstream.
local-edit, edit FILE
S'assurer que local-create a été exécuté si nécessaire pour FILE, puis
l'éditer avec vim
local-copy, cp SRCFILE DESTFILE
local-move, mv SRCFILE DESTFILE
local-remove, rm FILE
Frontend pour respectivement cp, mv et rm. Ces commandes agissent aussi
sur les fichiers orig et de tag.
local-tag, tag FILE TAG
Faire une copie du fichier local avec le tag spécifié. Si le fichier de
tag existe déjà, il est écrasé.
local-switch, switch TAG FILE
Sélectionner la copie avec le tag spécifié.
local-put, put [WORKDIR] DESTDIR
Copier tous les fichiers locaux dans DESTDIR, par exemple pour faire une
sauvegarde. Si DESTDIR n'est pas spécifié, prendre la valeur de
l'origine, affichée par local-list
local-get, get [-l|-s] SRCDIR [WORKDIR]
Opération inverse de local-put: intégrer tous les fichiers de SRCDIR
comme fichiers locaux. Si SRCDIR n'est pas spécifié, prendre la valeur
de l'origine, affichée par local-list
local-list, list [WORKDIR]
Lister tous les fichiers locaux. Les fichiers pour lesquels il faut
intégrer une modification de l'upstream avec la commande local-patch
sont identifiés visuellement.
upstream-diff, udiff [FILE]
Après intégration d'une nouvelle distribution upstream, afficher les
modifications entre la nouvelle distribution upstream et l'ancienne pour
tous les fichiers modifiables
local-diff, ldiff [FILE]
Afficher les modifications locales par rapport à l'upstream pour le(s)
fichier(s) spécifié(s).
local-patch, lpatch [FILE]
Après intégration d'une nouvelle distribution upstream, appliquer au(x)
le(s) fichier(s) spécifié(s) les modifications disponibles affichées par
upstream-diff.
local-forget, lforget [FILE]
Après intégration d'une nouvelle distribution upstream, oublier les
modifications disponibles pour le(s) fichier(s) spécifié(s).
}}}
{{{
uenv: Mettre à jour la configuration de l'environnement
USAGE
uenv [-u [projdirs...]]
Cette commande met à jour l'ordre de chargement des fichiers de configuration
dans ~/etc/{profile.d,bashrc.d}. Elle est donc utile si ces fichiers ont été
modifiés manuellement, ou si un fichier a été ajouté manuellement.
OPTIONS
HOME=/path/to/homedir
Spécifier le chemin vers ~
Cette option doit être placée avant les valeurs projdirs.
-u, --update
Installer ou mettre à jour les fichiers de profil des projets spécifiés:
Les fichiers ~/.profile, ~/.bash_profile et ~/.bashrc sont vérifiés et
corriger automatiquement pour inclure les fichiers de nutools.
Ensuite, les fichiers de profil sont copié dans les répertoires
~/etc/{profile.d,bashrc.d,default}
Les projets spécifiés *doivent* être configurés avec uinst -C, et
définir la valeur install_profiles=true dans leur fichier .udir
Si aucun projet n'est spécifié, prendre les fichiers de profil de
nutools.
-l, --local-profiles
Avec l'option -u, installer les profils locaux comme tels. Pour les
fichiers de profil qui sont indiqués comme non partagés, les copier dans
des répertoires spécifiques de la forme {profile,bashrc}.HOSTNAME.d et
default.HOSTNAME
-s, --shared-profiles
Installer les profils locaux comme des profils partagés. C'est l'option
par défaut.
}}}
{{{
ufixmod: forcer le mode d'une liste de fichiers
USAGE
ufixmod [options] [dirs|files....]
Le mode forcé pour les répertoires est rwxr-xr-x
Le mode forcé pour les fichiers est rw-r--r--
OPTIONS
-x, --executable
Forcer le mode rwX-r-Xr-X pour les fichiers
}}}
{{{
ugenpass: générer un mot de passe au hasard
USAGE
ugenpass [options]
OPTIONS
-l, --len LEN
Spécifier le nombre de caractères du mot de passe généré
-U, --upper COUNT
-L, --lower COUNT
-A, --alpha COUNT
-N, --number COUNT
-S, --symbol COUNT
-B, --special COUNT
Spécifier le nombre minimum de chaque classe de caractère
}}}
{{{
uinc.py: Plier/déplier des inclusions dans un fichier
USAGE
uinc.py [[options] dest...]
OPTIONS
-f Plier les inclusions
-u Déplier les inclusions (par défaut)
-@ Forcer le caractère '@' pour le pliage/dépliage
-* Forcer le caractère '*' pour le pliage/dépliage
--auto
Activer la recherche automatique de paramètres (par défaut)
--noauto
Désactiver la recherche automatique de paramètres
-I SPEC
Spécifier des fichiers à inclure dans les répertoires spécifiés
-X SPEC
Spécifier des fichiers à exclure dans les répertoires spécifiés
--refdir REFDIR
Spécifier le répertoire de référence. Soit un répertoire DEST spécifié
dans les arguments. Si un fichier à inclure *n'est pas* un fils du
répertoire DEST, l'emplacement effectif du fichier est calculé en
faisant comme si DEST==REFDIR.
Par exemple, soit DEST=/dest/path et REFDIR=/refdir/path. Si le fichier
/dest/path/file inclue le fichier ../inc, alors c'est le fichier
/refdir/inc qui est considéré.
Ceci permet de traiter les inclusions dans une copie temporaire d'un
répertoire, dans le cas où les fichier font référence à d'autres
fichiers situés relativement à l'emplacement original.
Les spécifications de fichiers sont de types glob: ils peuvent contenir les
wildcards * et ?. Ils supportent en plus la chaine '**' qui signifie n'importe
quelle profondeur de répertoire. 'dir/' est équivalent à 'dir/**' et signifie
tous les fichiers situés dans l'arborescence à partir de dir.
La variable UINCPATH contient une liste de répertoires qui sont consultés pour
trouver les fichiers à inclure.
}}}
{{{
uinc.py: Plier/déplier des inclusions dans un fichier
USAGE
uinc.py [[options] dest...]
OPTIONS
-f Plier les inclusions
-u Déplier les inclusions (par défaut)
-@ Forcer le caractère '@' pour le pliage/dépliage
-* Forcer le caractère '*' pour le pliage/dépliage
--auto
Activer la recherche automatique de paramètres (par défaut)
--noauto
Désactiver la recherche automatique de paramètres
-I SPEC
Spécifier des fichiers à inclure dans les répertoires spécifiés
-X SPEC
Spécifier des fichiers à exclure dans les répertoires spécifiés
--refdir REFDIR
Spécifier le répertoire de référence. Soit un répertoire DEST spécifié
dans les arguments. Si un fichier à inclure *n'est pas* un fils du
répertoire DEST, l'emplacement effectif du fichier est calculé en
faisant comme si DEST==REFDIR.
Par exemple, soit DEST=/dest/path et REFDIR=/refdir/path. Si le fichier
/dest/path/file inclue le fichier ../inc, alors c'est le fichier
/refdir/inc qui est considéré.
Ceci permet de traiter les inclusions dans une copie temporaire d'un
répertoire, dans le cas où les fichier font référence à d'autres
fichiers situés relativement à l'emplacement original.
Les spécifications de fichiers sont de types glob: ils peuvent contenir les
wildcards * et ?. Ils supportent en plus la chaine '**' qui signifie n'importe
quelle profondeur de répertoire. 'dir/' est équivalent à 'dir/**' et signifie
tous les fichiers situés dans l'arborescence à partir de dir.
La variable UINCPATH contient une liste de répertoires qui sont consultés pour
trouver les fichiers à inclure.
}}}
{{{
uinst.sh: Déployer en local un fichier, une archive, ou un répertoire
USAGE
uinst.sh [options] <file|archive|dir>
OPTIONS
var=value
Spécifier la valeur d'une variable ou d'un préfixe, plutôt que de
laisser uprefix l'autodétecter. Utiliser 'uprefix -l' pour avoir une
liste de préfixes valides. Utiliser 'udir --help-vars' pour avoir une
liste de variables valides pour uinst.sh.
-d /path/to/destdir
Spécifier le répertoire destination, exactement comme si la valeur
destdir avait été spécifiée, i.e destdir="/path/to/destdir"
-h, --host [user@]host
Avec la méthode de déploiement uinst:rsync, permettre de spécifier un
hôte différent. Cette option est ignorée pour les autres méthodes de
déploiement. Si host vaut localhost, un déploiement local avec ssh est
effectué. Si host vaut '.', un déploiement local *sans passer par ssh*
est effectué, comme si seul le chemin avait été spécifié.
Cette option initialise la valeur destdir_override_userhost
-S, --ssh ssh
Avec la méthode de déploiement uinst:rsync, spécifier le programme à
utiliser pour la connection par ssh. Cette option initialise la valeur
destdir_ssh
--force-remote
Avec la méthode de déploiement uinst:rsync, si un hôte est spécifié dans
la valeur de destdir, forcer le déploiement distant avec ssh+rsync, même
si l'hôte et l'utilisateur correspondent aux valeurs courantes. Cette
option initialise la valeur destdir_force_remote
-a, --auto
Si la source n'est pas spécifiée, déterminer le répertoire à déployer
automatiquement (c'est la valeur par défaut)
--no-auto
Ne pas déterminer automatiquement le répertoire à déployer.
--prefix
Corriger les chemins srcdir et destdir qui commencent par des préfixes
valides (c'est la valeur par défaut). Utiliser 'uprefix -l' pour avoir
une liste de préfixes valides
--no-prefix
Ne jamais corriger un chemin.
--include-vcs
Inclure les fichiers de VCS dans les fichiers copiés. Par défaut, les
fichiers de VCS sont exclus.
-l, --local-profiles
Installer les profils locaux comme tels
--shared-profiles
Installer les profils locaux comme des profils partagés. C'est la valeur
par défaut pour compatibilité.
-C Configurer un répertoire pour le déploiement avec uinst
Ajouter l'option --force pour forcer la reconfiguration
}}}
{{{
uinst: Déployer en local un fichier, une archive, ou un répertoire
USAGE
uinst [options] <file|archive|dir>
OPTIONS
var=value
Spécifier la valeur d'une variable ou d'un préfixe, plutôt que de
laisser uprefix l'autodétecter. Utiliser 'uprefix -l' pour avoir une
liste de préfixes valides. Utiliser 'udir --help-vars' pour avoir une
liste de variables valides pour uinst.
-d /path/to/destdir
Spécifier le répertoire destination, exactement comme si la valeur
destdir avait été spécifiée, i.e destdir="/path/to/destdir"
-h, --host [user@]host
Avec la méthode de déploiement uinst:rsync, permettre de spécifier un
hôte différent. Cette option est ignorée pour les autres méthodes de
déploiement. Si host vaut localhost, un déploiement local avec ssh est
effectué. Si host vaut '.', un déploiement local *sans passer par ssh*
est effectué, comme si seul le chemin avait été spécifié.
Cette option initialise la valeur destdir_override_userhost
-S, --ssh ssh
Avec la méthode de déploiement uinst:rsync, spécifier le programme à
utiliser pour la connection par ssh. Cette option initialise la valeur
destdir_ssh
--force-remote
Avec la méthode de déploiement uinst:rsync, si un hôte est spécifié dans
la valeur de destdir, forcer le déploiement distant avec ssh+rsync, même
si l'hôte et l'utilisateur correspondent aux valeurs courantes. Cette
option initialise la valeur destdir_force_remote
-a, --auto
Si la source n'est pas spécifiée, déterminer le répertoire à déployer
automatiquement (c'est la valeur par défaut)
--no-auto
Ne pas déterminer automatiquement le répertoire à déployer.
--prefix
Corriger les chemins srcdir et destdir qui commencent par des préfixes
valides (c'est la valeur par défaut). Utiliser 'uprefix -l' pour avoir
une liste de préfixes valides
--no-prefix
Ne jamais corriger un chemin.
--include-vcs
Inclure les fichiers de VCS dans les fichiers copiés. Par défaut, les
fichiers de VCS sont exclus.
-l, --local-profiles
Installer les profils locaux comme tels
--shared-profiles
Installer les profils locaux comme des profils partagés. C'est la valeur
par défaut pour compatibilité.
-C Configurer un répertoire pour le déploiement avec uinst
Ajouter l'option --force pour forcer la reconfiguration
}}}
{{{
ujava: Lancer un script après avoir sélectionné une version de java
USAGE
ujava [options] version [args...]
OPTIONS
-b, --bits 32|64|auto
--32
--64
Sélectionner une version 32 ou 64 bits de java
-e, --exact
Sélectionner la version *exacte* de java demandée, au lieu de la version
minimum correspondant à la version demandée.
Si la version requise de java n'est pas trouvée, retourner avec le code
d'erreur 254.
La version de java attendue peut-être exprimée de l'une des façons suivantes:
1.4 1.4+ 1.5 1.5+ 1.6 1.6+ 1.7 1.7+
Si args n'est pas spécifié, un shell est lancé dans lequel les variables
JAVA_HOME, JAVA, JAVAC et PATH sont mis à jour.
}}}
{{{
uldap: Shell pour accéder à un serveur ldap
USAGE
uldap [options]
OPTIONS
-C profile
Sélectionner un profil de connexion. Par défaut, si l'option -H n'est
pas spécifiée, le premier profil est sélectionné.
-x Ne pas tenter de faire une connexion sur le profil par défaut si aucun
profil n'est sélectionné.
-f script
Lire les commandes depuis le script spécifié.
-n Avec un script donné en ligne de commande ou lu depuis un fichier, ne pas
ajouter automatiquement la commande print à la fin
-i Si un script est spécifié, passer en mode interactif après l'exécution
du script.
-e Forcer l'arrêt du script si une erreur se produit. C'est l'option par
défaut pour un script spécifié avec -f.
-l input.ldif
Charger le fichier input.ldif comme espace de travail initial
-H ldapuri
-D binddn
-w password
-b searchbase
-v var=value
COMMANDES
$ cmd
Passer directement une commande au shell.
set [options] [var=value...]
Changer des options ou des variables. set sans argument affiche la liste
des variables définies.
[set] plain
Passer en mode 'plain': indiquer que l'espace de travail contient des
données brutes. Les pré-traitements et post-traitements (uncut_on_load,
decode_on_load, encode_on_save, cut_on_save) ne sont pas appliqués sur
cet espace de travail
[set] ldif
Passer en mode 'ldif': indiquer que l'espace de travail contient des
données ldif. Les pré-traitements et post-traitements sont appliqués
normalement sur cet espace de travail
[set] append
Pour certaines opérations, spécifier si le résultat de la *prochaine*
opération remplace le contenu de l'espace de travail courant (par
défaut), ou si le résultat est ajouté à la fin.
last
Afficher en mode édition la dernière commande. Cette commande n'est
fonctionnelle qu'avec une version de bash >=4.x
profile name
Choisir le profil 'name'. Equivalent à 'set profile=name'. Sans
argument, afficher la liste des profils valides.
auth anonymous|binddn [password]
Spécifier le compte à utiliser pour se connecter. Equivalent à
'set binddn=binddn; set password=password'
clear [-k]
Vider l'espace de travail et passer en mode 'plain'.
Avec l'option -k, supprimer aussi tout l'historique d'annulation.
load [-k] input
Charger un fichier dans l'espace de travail. Si l'extension du fichier
est .ldif, passer en mode 'ldif'
En mode append, rajouter le contenu du fichier à l'espace de travail,
puis repasser en mode replace.
Le code de retour est 0 si le fichier a été chargé, 1 sinon.
save [-a] output
Sauvegarder l'espace de travail dans un fichier.
Avec l'option -a, rajouter au fichier au lieu de l'écraser
print
Afficher l'espace de travail
alias a=rdn...
Définir un alias pour la commande cd. 'a' est l'alias, 'rdn' est le dn
correspondant, exprimé par rapport à $suffix. Sans argument, afficher
la liste des aliases définis.
cd rdn
Changer searchbase. Par défaut, il s'agit d'un rdn relatif à $searchbase
- Certains aliases sont supportés: .. pour l'objet parent, ~ pour
$suffix, / pour la racine. 'cd' sans argument équivaut à 'cd ~'
- Si le dn commence par '~/', il s'agit d'un rdn relatif à $suffix.
- Si le dn commence par /, searchbase reçoit la valeur rdn sans
modifications (sauf bien sûr enlever le '/' de tête si nécessaire). Il
faut alors que ce soit un dn absolu.
ls [-b searchbase] [filter [attrs...]]
search [-b searchbase] [filter [attrs...]]
Utiliser ldapsearch pour faire la recherche, et copier le résultat dans
l'espace de travail. 'ls' est équivalent à 'search -s one'. Si ce n'est
pas déjà le cas, passer en mode 'ldif'.
L'option -b prend une valeur avec la même syntaxe que la commande cd,
sauf que les alias ne sont pas supportés. En particulier, la valeur est
relative au $searchbase courant. Pour faire une recherche par rapport à
$suffix, il faut utiliser la syntaxe ~/searchbase.
En mode append, rajouter le résultat de la recherche à l'espace de
travail, puis repasser en mode replace.
Le code de retour est 1 si aucun enregistrement n'a été trouvé, sinon
le code de retour est celui de la commande ldapsearch.
cut Couper les lignes trop longues. Cette action est en principe effectuée
automatiquement lors de la sauvegarde. Il n'est pas conseillé
d'appliquer des méthodes de transformation après avoir utilisé cette
action.
uncut
Fusionner les lignes coupées. Cette action est en principe effectuée
automatiquement lors du chargement ou après la recherche.
encode [attrs...]
Encoder en base64 les valeurs des attributs mentionnés.
decode [attrs...]
Décoder les valeurs des attributs mentionnés si nécessaire (c'est à dire
s'ils sont encodés en base64)
keepattr attrs...
Garder uniquement les lignes des attributs mentionnés. Ensuite,
supprimer les objets ayant uniquement la ligne dn: (en d'autres termes,
keepattr sans argument supprime *tout* l'espace de travail)
keepval attr patterns...
Pour l'attribut attr, garder uniquement les lignes pour lesquelles les
valeurs correspondent aux expressions régulières. Les autres attributs
ne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la
ligne dn:
exclude attrs...
Supprimer les lignes des attributs mentionnés. Ensuite, supprimer les
objets ayant uniquement la ligne dn:
excludeval attr patterns...
Pour l'attribut attr, supprimer les lignes pour lesquelles les
valeurs correspondent aux expressions régulières. Les autres attributs
ne sont pas modifiés. Ensuite, supprimer les objets ayant uniquement la
ligne dn:
keepvalentry attr patterns...
Pour l'attribut attr, vérifier si *au moins une* valeur correspond à
l'une des expressions régulières. Si c'est le cas, garder l'entrée
entière, sinon supprimer l'entrée.
excludevalentry attr patterns...
Pour l'attribut attr, vérifier si *aucune* des valeurs ne correspond à
l'une des expressions régulières. Si c'est le cas, garder l'entrée
entière, sinon supprimer l'entrée.
setval attr values...
Remplacer toutes les valeurs de l'attribut attr par les valeurs
spécifiées.
addval attr values...
Ajouter un nouvel attribut avec les valeurs spécifiées. Si l'attribut
existe déjà, les nouvelles valeurs sont ajoutées à la fin.
sed args
Modifier l'espace de travail avec le résultat de la commande sed.
note: aucun argument n'est filtré, mais il ne faut pas utiliser les
options de sed qui provoquent la modification en place du fichier,
comme par exemple l'option -i
awk args
Modifier l'espace de travail avec le résultat de la commande awk.
grep args
Modifier l'espace de travail avec le résultat de la commande grep.
format [options] attrs...
Formater l'espace de travail en données tabulaires, et passer en mode
'plain'.
--show-headers
Afficher les en-têtes
-F FSEP
Spécifier le séparateur pour les attributs. Par défaut, il s'agit du
caractère de tabulation.
-R VSEP
Spécifier le séparateur pour les valeurs des attributs. Par défaut, il
s'agit du point-virgule ';'
-e Retourner les valeurs comme des variables shell. Les options -F et -R
sont ignorées. Les attributs multivalués sont écrits sous forme de
tableaux. Par exemple:
attributes=('mail' 'givenName')
index=0
mail='user@domain.fr'
givenName=('peter' 'gabriel')
--bc
Dans le mode -e, spécifier une commande à insérer avant le premier
enregistrement. Quand cette commande est lancée, index==-1
-c Dans le mode -e, spécifier une commande à insérer après chaque
enregistrement
--ec
Dans le mode -e, spécifier une commande à insérer après le dernier
enregistrement
sort [args]
Modifier l'espace de travail avec le résultat de la commande sort.
edit
Lancer un éditeur pour modifier l'espace de travail.
diff [options]
Afficher les différences entre l'espace de travail et la version
précédente
ifok cmd
iferror cmd
Si le dernier code de retour est 0 (resp. !=0), lancer la commande cmd
skip n
Sauter les n prochaines commandes. A utiliser avec ifok et iferror
undo
Annuler la dernière modification effectuée sur l'espace de travail
Les directives suivantes prennent le contenu de l'espace de travail, et le
transforment en une suite de commandes de modifications pour ldapmodify:
A Créer un objet de toutes pièces avec les attributs donnés et leurs
valeurs.
a Ajouter les valeurs spécifiée à l'attribut
r Remplacer les valeurs de l'attribut par celles spécifiées
d Supprimer les valeurs spécifiées de l'attribut
D Supprimer l'attribut
delentry
Supprimer l'objet
ldapmodify
Utiliser ldapmodify pour modifier les objets sur le serveur. Il faut
utiliser au préalable l'une des méthodes de transformation parmi A, a,
r, d, D, delentry.
Le code de retour est celui de la commande ldapmodify.
ldapadd
Utiliser ldapadd pour créer les objets situés dans l'espace de travail.
Le code de retour est celui de la commande ldapadd.
ldapdelete
Utiliser ldapdelete pour supprimer la liste des dns situés dans l'espace
de travail.
Le code de retour est celui de la commande ldapdelete.
Notes:
- les expressions régulières sont celles reconnues par awk.
- pour spécifier plusieurs actions sur une même ligne, les séparer par //
- le code de retour est 0 si ok, 255 si une erreur s'est produite (erreur de
syntaxe, de connexion, de lecture/écriture de fichier, etc.). sinon, les
opérations ldap{search,modify,delete,add} ont leur code de retour respectifs
}}}
!Liste des librairies de ulib
* [[ulib/apache]]
* [[ulib/apache.tools]]
* [[ulib/auto]]
* [[ulib/awk]]
* [[ulib/base]]
* [[ulib/base.args]]
* [[ulib/base.array]]
* [[ulib/base.bool]]
* [[ulib/base.compat]]
* [[ulib/base.core]]
* [[ulib/base.init]]
* [[ulib/base.num]]
* [[ulib/base.quote]]
* [[ulib/base.split]]
* [[ulib/base.string]]
* [[ulib/base.tools]]
* [[ulib/base.ulib]]
* [[ulib/bash]]
* [[ulib/cgi]]
* [[ulib/cgisupport]]
* [[ulib/compat]]
* [[ulib/conf]]
* [[ulib/crontab]]
* [[ulib/debian]]
* [[ulib/DEFAULTS]]
* [[ulib/install]]
* [[ulib/ipcalc]]
* [[ulib/java]]
* [[ulib/javaproperties]]
* [[ulib/json]]
* [[ulib/ldap]]
* [[ulib/ldif]]
* [[ulib/legacy]]
* [[ulib/macosx]]
* [[ulib/mkcrypt]]
* [[ulib/modeline]]
* [[ulib/network-manager-service]]
* [[ulib/password]]
* [[ulib/prefixes]]
* [[ulib/PREFIXES-DEFAULTS]]
* [[ulib/pretty]]
* [[ulib/ptools]]
* [[ulib/redhat]]
* [[ulib/runs]]
* [[ulib/runsmod]]
* [[ulib/runsmod.defaults]]
* [[ulib/semver]]
* [[ulib/service]]
* [[ulib/sysinfos]]
* [[ulib/template]]
* [[ulib/tiddlywiki]]
* [[ulib/udir]]
* [[ulib/uenv]]
* [[ulib/uenv_update]]
* [[ulib/uinc]]
* [[ulib/uinst]]
* [[ulib/ulib]]
* [[ulib/ulibsh]]
* [[ulib/vcs]]
* [[ulib/virsh]]
* [[ulib/webobjects]]
* [[ulib/woinst]]
* [[ulib/wondermonitor]]
* [[ulib/wosign]]
* [[ulib/wotaskd]]
!! {{{compute_all_prefixes}}}
!! {{{recompute_all_prefixes}}}
!! {{{apache_resolvecert}}}
{{{
Calculer l'emplacement des certificats correspondant aux arguments $1 et
$2 (qui correspondent aux options --conf et --dir de apache_addcert()),
puis initialiser les variables $3(=cert), $4(=key) et $5(=ca)
}}}
!! {{{apache_addcert}}}
!! {{{apache_autoconf}}}
!! {{{apache_autoconf_localhosts}}}
!! {{{get_default_apachebin_prefix}}}
!! {{{get_default_apacheversion_prefix}}}
!! {{{get_default_apachectl_prefix}}}
!! {{{get_default_apachelogdir_prefix}}}
!! {{{get_default_apachesslcertsdir_prefix}}}
!! {{{get_default_apachesslkeysdir_prefix}}}
!! {{{get_default_apacheconfdir_prefix}}}
!! {{{get_default_apacheconf_prefix}}}
!! {{{get_default_apacheavsitesdir_prefix}}}
!! {{{get_default_apachesitesdir_prefix}}}
!! {{{get_default_htdocsdir_prefix}}}
!! {{{get_default_cgibindir_prefix}}}
!! {{{compute_apache_prefixes}}}
!! {{{recompute_apache_prefixes}}}
!! {{{get_APACHEBIN_prefix}}}
!! {{{get_APACHEVERSION_prefix}}}
!! {{{get_APACHECTL_prefix}}}
!! {{{get_APACHELOGDIR_prefix}}}
!! {{{get_APACHESSLCERTSDIR_prefix}}}
!! {{{get_APACHESSLKEYSDIR_prefix}}}
!! {{{get_APACHECONFDIR_prefix}}}
!! {{{get_APACHECONF_prefix}}}
!! {{{get_APACHEAVSITESDIR_prefix}}}
!! {{{get_APACHESITESDIR_prefix}}}
!! {{{get_HTDOCSDIR_prefix}}}
!! {{{get_CGIBINDIR_prefix}}}
!! {{{parseheaders}}}
!! {{{printheaders}}}
!! {{{resetheaders}}}
!! {{{copyall}}}
!! {{{lawkcsv}}}
!! {{{cawkcsv}}}
!! {{{awkcsv}}}
!! {{{lgrepcsv}}}
!! {{{cgrepcsv}}}
!! {{{grepcsv}}}
!! {{{lawkfsv2csv}}}
!! {{{cawkfsv2csv}}}
!! {{{awkfsv2csv}}}
!! {{{lmergecsv}}}
{{{
Fusionner sur la sortie standard les deux fichiers csv $1 et $2. La clé du
fichier $1 est spécifiée par l'option --lkey et vaut 1 par défaut. La clé
du fichier $2 est spécifiée par l'option --rkey et vaut 1 par défaut. Les
valeurs des clés ne doivent pas faire plus de 64 caractères de long.
}}}
!! {{{readleft}}}
!! {{{readright}}}
!! {{{right2left}}}
!! {{{cmergecsv}}}
!! {{{mergecsv}}}
!! {{{lsortcsv}}}
{{{
Trier le fichier csv $1. La clé du tri est spécifiée par l'option -k et
vaut 1 par défaut. Les valeurs des clés ne doivent pas faire plus de 64
caractères de long.
}}}
!! {{{csortcsv}}}
!! {{{sortcsv}}}
!! {{{ldumpcsv}}}
!! {{{cdumpcsv}}}
!! {{{dumpcsv}}}
!! {{{lprintcsv}}}
!! {{{cprintcsv}}}
!! {{{printcsv}}}
!! {{{parse_opts}}}
{{{
Analyser des arguments. Cette fonction doit être appelée avec une description
des options à analyser, suivie des arguments proprement dits. En fonction des
options rencontrées, certaines variables sont mises à jour.
Les arguments de cette fonction sont donc de la forme 'optdescs -- args'
}}}
!! {{{parse_args_check}}}
{{{
Simplifier l'utilisation de parse_opts(). En entrée, le tableau args doit être
initialisé avec la liste des options. En sortie, ce tableau contient la liste
des arguments restant sur la ligne de commande. En cas d'erreur, retourner 1.
Exemple d'utilisation:
args=(...)
parse_args_check "$@" || return; set -- "${args[@]}"
}}}
!! {{{parse_args}}}
{{{
Simplifier l'utilisation de parse_opts(). En entrée, le tableau args doit être
initialisé avec la liste des options. En sortie, ce tableau contient la liste
des arguments restant sur la ligne de commande. En cas d'erreur, quitter le
script avec die()
Exemple d'utilisation:
args=(...)
parse_args_check "$@"; set -- "${args[@]}"
}}}
!! {{{genparse}}}
{{{
Afficher une ligne de commande à évaluer pour simplifier l'utilisation de
parse_opts(). Une fonction display_help() par défaut est définie et les
options appropriées de parse_opts sont utilisées pour reconnaître les options
spécifiées par les arguments.
Cette fonction peut être utilisée de cette manière:
HELP_DESC=...
HELP_ARG_DESC=... # pour chaque arg
eval "$(genparse [args...])"
D'autres variables peuvent être définies: HELP_USAGE, HELP_OPTIONS,
HELP_ARG_OPTION. Consulter le source pour connaitre leur utilisation
Les arguments de cette fonction sont de la forme 'sansarg' pour une option
simple qui ne prend pas d'argument ou 'avecarg=[default-value]' pour une
option qui prend un argument. Les options générées sont des options
longues. En l'occurence, les options générées sont respectivement '--sansarg'
et '--avecarg:'
Les variables et les options sont toujours en minuscule. Pour les variables,
le caractère '-' est remplacé par '_'. Si une option contient une lettre en
majuscule, l'option courte correspondante à cette lettre sera aussi reconnue.
Par exemple, la commande suivante:
genparse Force enCoding=utf-8 input= long-Option=
affichera ceci:
function display_help() {
[ -n "$HELP_USAGE" ] || HELP_USAGE="USAGE
$scriptname [options]"
[ -n "$HELP_OPTIONS" ] || HELP_OPTIONS="OPTIONS
${HELP_FORCE_OPTION:- -f, --force${HELP_FORCE_DESC:+
$HELP_FORCE_DESC}}
}}}
!! {{{is_yes}}}
{{{
retourner vrai si $1 est une valeur "oui"
}}}
!! {{{is_no}}}
{{{
retourner vrai si $1 est une valeur "non"
}}}
!! {{{yesval}}}
{{{
normaliser une valeur vraie: si $1 est une valeur "oui", afficher 1, sinon
afficher une chaine vide
}}}
!! {{{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
valeur ""
note: en principe, la syntaxe est 'setb var cmd args...'. cependant, la
syntaxe 'setb var=cmd args...' est supportée aussi
}}}
!! {{{evalb}}}
{{{
Lancer la commande $@ avec evalx() en supprimant la sortie standard. Si la
commande retourne vrai, afficher 1. Sinon, afficher ""
}}}
!! {{{setxb}}}
{{{
équivalent à setx $1 evalb $2..@
}}}
!! {{{setx2}}}
!! {{{rawecho}}}
!! {{{rawecho_}}}
!! {{{quote_arg}}}
!! {{{quoted_arg}}}
!! {{{quoted_args}}}
!! {{{set_var}}}
!! {{{set_var_cmd}}}
!! {{{set_var_literal}}}
!! {{{quote_awk}}}
!! {{{quoted_awk}}}
!! {{{quote_seds}}}
!! {{{quote_form}}}
!! {{{quoted_form}}}
!! {{{echo_}}}
{{{
afficher la valeur $* sans passer à la ligne
}}}
!! {{{recho}}}
{{{
afficher une valeur brute. contrairement à la commande echo, ne reconnaitre
aucune option (i.e. -e, -E, -n ne sont pas signifiants)
}}}
!! {{{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)
}}}
!! {{{should_quote}}}
{{{
Tester si la chaine $* doit être mise entre quotes
}}}
!! {{{qval}}}
{{{
Afficher la chaine $* quotée avec "
}}}
!! {{{qvalm}}}
{{{
Afficher la chaine $* quotée si nécessaire avec "
}}}
!! {{{qvalr}}}
{{{
Afficher la chaine $* quotée si nécessaire avec ", sauf si elle est vide
}}}
!! {{{qvals}}}
{{{
Afficher chaque argument de cette fonction quotée le cas échéant avec "
Chaque valeur est séparée par un espace.
}}}
!! {{{qwc}}}
{{{
Dans la chaine $*, remplacer \ par \\, " par \", $ par \$, ` par \`, puis
quoter la chaine avec ", sauf les wildcards * et ?
Cela permet de quoter une chaine permettant de glober des fichiers, e.g
eval "ls $(qwc "$value")"
Note: la protection de ! n'est pas effectuée, parce que le comportement du
shell est incohérent entre le shell interactif et les scripts. Pour une
version plus robuste, il est nécessaire d'utiliser un programme externe tel
que sed ou awk
}}}
!! {{{qlines}}}
{{{
Traiter chaque ligne de l'entrée standard pour en faire des chaines quotées
avec '
}}}
!! {{{setv}}}
{{{
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
}}}
!! {{{echo_setv}}}
{{{
Afficher la commande qui serait lancée par setv "$@"
}}}
!! {{{setx}}}
{{{
syntaxe 1: setx var cmd
initialiser la variable $1 avec le résultat de la commande "$2..@"
note: en principe, la syntaxe est 'setx var cmd args...'. cependant, la
syntaxe 'setx var=cmd args...' est supportée aussi
syntaxe 2: setx -a array cmd
initialiser le tableau $1 avec le résultat de la commande "$2..@", chaque
ligne du résultat étant un élément du tableau
note: en principe, la syntaxe est 'setx -a array cmd args...'. cependant, la
syntaxe 'setx -a array=cmd args...' est supportée aussi
}}}
!! {{{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)))"
Retourner le dernier code d'erreur non nul, ou 0 si toutes les commandes se
sont exécutées sans erreur.
}}}
!! {{{setxx}}}
{{{
équivalent à setx $1 evalx $2..@
}}}
!! {{{evalp}}}
{{{
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
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
de bash.
}}}
!! {{{setxp}}}
{{{
équivalent à setx $1 evalp $2..@
}}}
!! {{{testx}}}
{{{
Faire un test unaire avec la commande [ sur une valeur calculée avec evalx.
Utiliser la syntaxe 'testx op cmds...' e.g.
testx -z cmd1 // cmd2
}}}
!! {{{test2x}}}
{{{
Faire une test binaire avec la commande [ entre une valeur spécifiée et une
valeur calculée avec evalx. Utiliser la syntaxe 'test2x value op cmds...' e.g.
test2x value == cmd1 // cmd2
}}}
!! {{{testrx}}}
{{{
Faire une test binaire avec la commande [[ entre une valeur spécifiée et une
valeur calculée avec evalx. Utiliser la syntaxe 'testrx value op cmds...' e.g.
testrx value == cmd1 // cmd2
}}}
!! {{{testp}}}
{{{
Faire un test unaire avec la commande [ sur une valeur calculée avec evalp.
Utiliser la syntaxe 'testp op cmds...' e.g.
testp -z cmd1 // cmd2
}}}
!! {{{test2p}}}
{{{
Faire une test binaire avec la commande [ entre une valeur spécifiée et une
valeur calculée avec evalp. Utiliser la syntaxe 'test2p value op cmds...' e.g.
test2p value == cmd1 // cmd2
}}}
!! {{{testrp}}}
{{{
Faire une test binaire avec la commande [[ entre une valeur spécifiée et une
valeur calculée avec evalp. Utiliser la syntaxe 'testrp value op cmds...' e.g.
testrp value == cmd1 // cmd2
}}}
!! {{{err2out}}}
{{{
lancer la commande $@ en redirigeant la sortie d'erreur sur la sortie standard
}}}
!! {{{isnum}}}
{{{
retourner vrai si $1 est une valeur numérique entière (positive ou négative)
}}}
!! {{{ispnum}}}
{{{
retourner vrai si $1 est une valeur numérique entière positive
}}}
!! {{{isrnum}}}
{{{
retourner vrai si $1 est une valeur numérique réelle (positive ou négative)
le séparateur décimal peut être . ou ,
}}}
!! {{{qawk}}}
{{{
Dans la chaine $*, remplacer \ par \\ et " par \" et afficher la chaine
entourée de guillemets. Ceci est utile pour quoter des valeur à insérer dans
un script awk
}}}
!! {{{qseds}}}
{{{
Quoter la chaine $*, qui doit être utilisée comme chaine de recherche ou de
remplacement de grep, sed ou awk
}}}
!! {{{qform}}}
{{{
Dans la chaine $* qui est de la forme "name=value", remplacer dans name et
dans value '%' par '%25', '+' par '%2B', '&' par '%26', '=' par '%3D', ' ' par
'+'
}}}
!! {{{splitfsep}}}
{{{
Découper $1 de la forme "first[SEPsecond]" entre first, qui est placé dans la
variable $3(=first) et second, qui est placée dans la variable $4(=second). $2
est la valeur SEP. Le découpage est faite sur la *première* occurence de SEP.
}}}
!! {{{splitfsep2}}}
{{{
Découper $1 de la forme "[firstSEP]second" entre first, qui est placé dans la
variable $3(=first) et second, qui est placée dans la variable $4(=second). $2
est la valeur SEP. Le découpage est faite sur la *première* occurence de SEP.
}}}
!! {{{splitlsep}}}
{{{
Découper $1 de la forme "first[SEPsecond]" entre first, qui est placé dans la
variable $3(=first) et second, qui est placée dans la variable $4(=second). $2
est la valeur SEP. Le découpage est faite sur la *dernière* occurence de SEP.
}}}
!! {{{splitlsep2}}}
{{{
Découper $1 de la forme "[firstSEP]second" entre first, qui est placé dans la
variable $3(=first) et second, qui est placée dans la variable $4(=second). $2
est la valeur SEP. Le découpage est faite sur la *dernière* occurence de SEP.
}}}
!! {{{splitvar}}}
{{{
Découper $1 de la forme name[=value] entre le nom, qui est placé dans la
variable $2(=name) et la valeur, qui est placée dans la variable $3(=value)
}}}
!! {{{splitpath}}}
{{{
Découper $1 de la forme [dir/]name entre le répertoire, qui est placé dans la
variable $2(=dir), et le nom du fichier, qui est placé dans la variable
$3(=name)
}}}
!! {{{splitname}}}
{{{
Découper $1 de la forme basename[.ext] entre le nom de base du fichier, qui
est placé dans la variable $2(=basename) et l'extension, qui est placée dans
la variable $3(=ext)
Attention, si $1 est un chemin, le résultat risque d'être faussé. Par exemple,
'splitname a.b/c' ne donne pas le résultat escompté.
}}}
!! {{{splithost}}}
{{{
Découper $1 de la forme hostname[.domain] entre le nom d'hôte, qui est placé
dans la variable $2(=hostname) et le domaine, qui est placée dans la variable
$3(=domain)
}}}
!! {{{splituserhost}}}
{{{
Découper $1 de la forme [user@]host entre le nom de l'utilisateur, qui est placé
dans la variable $2(=user) et le nom d'hôte, qui est placée dans la variable
$3(=host)
}}}
!! {{{splitpair}}}
{{{
Découper $1 de la forme first[:second] entre la première valeur, qui est placé
dans la variable $2(=src) et la deuxième valeur, qui est placée dans la variable
$3(=dest)
}}}
!! {{{splitproxy}}}
{{{
Découper $1 de la forme http://[user:password@]host[:port]/ entre les valeurs
$2(=host), $3(=port), $4(=user), $5(=password)
}}}
!! {{{spliturl}}}
{{{
Découper $1 de la forme scheme://[user:password@]host[:port]/path entre les
valeurs $2(=scheme), $3(=user), $4(=password), $5(=host), $6(=port), $7(=path)
}}}
!! {{{straddp}}}
{{{
ajouter le préfixe $1 à $2*
}}}
!! {{{strdelp}}}
{{{
enlever le préfixe $1 à $2*
}}}
!! {{{strdelp2}}}
{{{
enlever le préfixe $1 le plus long à $2*
}}}
!! {{{stradds}}}
{{{
ajouter le suffixe $1 à $2*
}}}
!! {{{strdels}}}
{{{
enlever le suffixe $1 à $2*
}}}
!! {{{strdels2}}}
{{{
enlever le suffixe le plus long $1 à $2*
}}}
!! {{{strlower}}}
{{{
afficher en minuscule la valeur $*
}}}
!! {{{strlower1}}}
{{{
afficher la valeur $* après avoir converti la première lettre en minuscule
}}}
!! {{{strlowers}}}
{{{
afficher les valeurs $1..* après avoir converti leur première lettre en
minuscule
}}}
!! {{{strupper}}}
{{{
afficher en majuscule la valeur $*
}}}
!! {{{strupper1}}}
{{{
afficher la valeur $* après avoir converti la première lettre en majuscule
}}}
!! {{{struppers}}}
{{{
afficher les valeurs $1..* après avoir converti leur première lettre en
majuscule
}}}
!! {{{strmid}}}
{{{
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
par l'un des caractères /, #, % pour indiquer le type de recherche
}}}
!! {{{first_char}}}
{{{
retourner le premier caractère de la chaine $*
}}}
!! {{{last_char}}}
{{{
retourner le dernier caractère de la chaine $*
}}}
!! {{{first_chars}}}
{{{
retourner tous les caractères de la chaine $*, excepté le dernier
}}}
!! {{{last_chars}}}
{{{
retourner tous les caractères de la chaine $*, excepté le premier
}}}
!! {{{first_char_is}}}
{{{
Tester si le premier caractère de la chaine $1 est $2
}}}
!! {{{last_char_is}}}
{{{
Tester si le dernier caractère de la chaine $1 est $2
}}}
!! {{{beginswith}}}
{{{
Tester si la chaine $1 commence par le wildcard $2
}}}
!! {{{endswith}}}
{{{
Tester si la chaine $1 se termine par le wildcard $2
}}}
!! {{{base_umove}}}
{{{
Outil de haut niveau pour déplacer un fichier ou un lien. Si c'est un lien qui
est déplacé, la destination du lien est mise à jour si elle est relative.
l'option '-d UPDATEDIR' permet de spécifier un répertoire dans lequel tous les
liens qui pointent vers le fichier déplacé sont mis à jour si le déplacement
du fichier se fait avec succès.
}}}
!! {{{base_udelete}}}
{{{
Outil de haut niveau pour supprimer un fichier ou un lien. Si on doit
supprimer un fichier, et que l'option '-d UPDATEDIR' est spécifiée, et que des
liens du répertoire UPDATEDIR pointent vers le fichier supprimé, ces liens
sont supprimés aussi.
}}}
!! {{{base_ucopy}}}
{{{
Outil de haut niveau pour copier un fichier ou un lien. Si c'est un lien qui
est copié, la destination du lien est mise à jour si elle est relative.
}}}
!! {{{setyesval}}}
{{{
mettre la valeur normalisée de la valeur "oui" de $2 dans la variable $1
}}}
!! {{{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
}}}
!! {{{normyesvals}}}
{{{
remplacer les valeur des variables $1..* par les valeurs normalisées
respectives de leur valeur "oui"
}}}
!! {{{quote_in}}}
{{{
Comme quote_arg pour une chaine lue sur stdin
}}}
!! {{{quote_sin}}}
{{{
Pour la chaine lue sur stdin, remplacer ' par '\''. Cela permet de protéger une
chaine à mettre entre quotes
}}}
!! {{{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é
}}}
!! {{{quoted_sarg}}}
{{{
Dans la chaine $1, remplacer ' par '\'', et afficher la chaine entourée de
quotes
}}}
!! {{{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
}}}
!! {{{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
}}}
!! {{{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
}}}
!! {{{array_count}}}
{{{
retourner le nombre d'éléments du tableau $1
}}}
!! {{{array_isempty}}}
{{{
tester si le tableau $1 est vide
}}}
!! {{{array_new}}}
{{{
créer un tableau vide dont le nom est $1
}}}
!! {{{array_add}}}
{{{
ajouter les valeurs $2..@ au tableau dont le nom est $1
}}}
!! {{{array_ins}}}
{{{
insérer les valeurs $2..@ au début du tableau dont le nom est $1
}}}
!! {{{array_del}}}
{{{
supprimer *les* valeurs $2 du tableau dont le nom est $1
}}}
!! {{{array_addu}}}
{{{
ajouter la valeur $2 au tableau dont le nom est $1, si la valeur n'y est pas
déjà. Retourner vrai si la valeur a été ajoutée
}}}
!! {{{array_set}}}
!! {{{array_insu}}}
{{{
insérer la valeur $2 au début du tableau tableau dont le nom est $1, si la
valeur n'y est pas déjà. Retourner vrai si la valeur a été ajoutée.
}}}
!! {{{array_fillrange}}}
{{{
Initialiser le tableau $1 avec les nombres de $2(=1) à $3(=10) avec un step de $4(=1)
}}}
!! {{{array_eq}}}
{{{
tester l'égalité des tableaux $1 et $2
}}}
!! {{{array_contains}}}
{{{
tester si le tableau dont le nom est $1 contient la valeur $2
}}}
!! {{{array_icontains}}}
{{{
tester si le tableau dont le nom est $1 contient la valeur $2, sans tenir
compte de la casse
}}}
!! {{{array_find}}}
{{{
si le tableau $1 contient la valeur $2, retourner l'index de la valeur. Si le
tableau $3 est spécifié, retourner la valeur à l'index dans ce tableau
}}}
!! {{{array_reverse}}}
{{{
Inverser l'ordre des élément du tableau $1
}}}
!! {{{array_replace}}}
{{{
dans le tableau $1, remplacer toutes les occurences de $2 par $3..*
}}}
!! {{{array_each}}}
{{{
Pour chacune des valeurs 'v' du tableau $1, appeler la fonction $2 avec les
arguments '$v $3..$n'
}}}
!! {{{array_map}}}
{{{
Pour chacune des valeurs 'v' du tableau $1, appeler la fonction $2 avec les
arguments '$v $3..$n', et remplacer la valeur par le résultat de la fonction
}}}
!! {{{first_value}}}
{{{
retourner la première valeur du tableau $1
}}}
!! {{{last_value}}}
{{{
retourner la dernière valeur du tableau $1
}}}
!! {{{array_copy}}}
{{{
copier le contenu du tableau $2 dans le tableau $1
}}}
!! {{{array_copy_firsts}}}
{{{
copier tous les valeurs du tableau $2(=$1) dans le tableau $1, excepté la dernière
}}}
!! {{{array_del_last}}}
!! {{{array_copy_lasts}}}
{{{
copier tous les valeurs du tableau $2(=$1) dans le tableau $1, excepté la première
}}}
!! {{{array_del_first}}}
!! {{{array_extend}}}
{{{
ajouter le contenu du tableau $2 au tableau $1
}}}
!! {{{array_extendu}}}
{{{
ajouter chacune des valeurs du tableau $2 au tableau $1, si ces valeurs n'y
sont pas déjà. Retourner vrai si au moins une valeur a été ajoutée
}}}
!! {{{array_extend_firsts}}}
{{{
ajouter toutes les valeurs du tableau $2 dans le tableau $1, excepté la dernière
}}}
!! {{{array_extend_lasts}}}
{{{
ajouter toutes les valeurs du tableau $2 dans le tableau $1, excepté la première
}}}
!! {{{array_xsplit}}}
{{{
créer le tableau $1 avec chaque élément de $2 (un ensemble d'éléments séparés
par $3, qui vaut ':' par défaut).
}}}
!! {{{array_split}}}
{{{
créer le tableau $1 avec chaque élément de $2 (un ensemble d'éléments séparés
par $3, qui vaut ':' par défaut). Les éléments vides sont ignorés. par exemple
"a::b" est équivalent à "a:b"
}}}
!! {{{array_from_path}}}
!! {{{array_from_xlines}}}
{{{
créer le tableau $1 avec chaque ligne de $2.
}}}
!! {{{array_from_lines}}}
{{{
créer le tableau $1 avec chaque ligne de $2. Les lignes vides sont ignorés.
}}}
!! {{{array_join}}}
{{{
afficher le contenu du tableau dont le nom est $1 sous forme d'une liste de
valeurs séparées par $2 (par défaut, une virgule)
Si $1=="@", alors les éléments du tableaux sont les arguments de la fonction à
partir de $3
Si $1!="@" et que le tableau est vide, afficher $3
Si $1!="@", $4 et $5 sont des préfixes et suffixes à rajouter à chaque élément
}}}
!! {{{array_mapjoin}}}
{{{
map le tableau $1 avec la fonction $2, puis afficher le résultat en séparant
chaque élément par $3. Les arguments et la sémantique sont les mêmes que pour
array_join en tenant compte de l'argument supplémentaire $2 qui est la
fonction pour array_map (les autres arguments sont décalés en conséquence)
}}}
!! {{{array_to_lines}}}
{{{
afficher le tableau dont le nom est $1 sous forme de lignes
}}}
!! {{{array_to_path}}}
{{{
afficher le tableau dont le nom est $1 sous forme d'une liste de chemins
séparés par ':')
}}}
!! {{{array_fix_paths}}}
{{{
Corriger les valeurs du tableau $1. Les valeurs contenant le séparateur
$2(=':') sont séparées en plusieurs valeurs. Par exemple avec le tableau
input=(a b:c), le résultat est input=(a b c)
}}}
!! {{{get_date_rfc822}}}
!! {{{get_date_fr}}}
!! {{{get_time_fr}}}
!! {{{parse_date}}}
!! {{{udelpath}}}
{{{
supprimer le chemin $1 de $2(=PATH)
}}}
!! {{{uaddpath}}}
{{{
Ajouter le chemin $1 à la fin, dans $2(=PATH), s'il n'y existe pas déjà
}}}
!! {{{uinspathm}}}
{{{
Ajouter le chemin $1 au début, dans $2(=PATH), s'il n'y existe pas déjà
}}}
!! {{{uinspath}}}
{{{
S'assurer que le chemin $1 soit au début de $2(=PATH)
}}}
!! {{{withpath}}}
{{{
tester si le chemin est relatif à . ou à .., ou est absolu. i.e 'withpath a/b'
renvoie faux alors que 'withpath ./a/b' renvoie vrai
}}}
!! {{{withext}}}
{{{
tester si le fichier a une extension
}}}
!! {{{normpath}}}
{{{
normaliser le chemin $1, qui est soit absolu, soit relatif à $2 (qui vaut
$(pwd) par défaut)
}}}
!! {{{abspath}}}
{{{
Retourner un chemin absolu vers $1. Si $2 est non nul et si $1 est un chemin
relatif, alors $1 est exprimé par rapport à $2, sinon il est exprimé par
rapport au répertoire courant.
Si le chemin n'existe pas, il n'est PAS normalisé. Sinon, les meilleurs
efforts sont faits pour normaliser le chemin.
}}}
!! {{{parentdirs}}}
{{{
Obtenir la liste de tous les parents du répertoire $2 dans le tableau $1, du
répertoire $2 vers la racine. Si $3 commence par 'r' (comme reverse), l'ordre
est inversé: le tableau contient les répertoire de la racine vers $2.
}}}
!! {{{ppath}}}
{{{
Dans un chemin *absolu*, remplacer "$HOME" par "~" et "$(pwd)/" par "", afin
que le chemin soit plus facile à lire. Le répertoire courant est spécifié par
$2 ou $(pwd) si $2 est vide
}}}
!! {{{relpath}}}
{{{
Afficher le chemin relatif de $1 par rapport à $2. Si $2 n'est pas spécifié,
on prend le répertoire courant. Si $1 ou $2 ne sont pas des chemins absolus,
il sont transformés en chemins absolus par rapport à $3. Si $1==$2, retourner
une chaine vide
}}}
!! {{{relpathx}}}
{{{
Comme relpath, mais pour un chemin vers un exécutable qu'il faut lancer:
s'assurer qu'il y a une spécification de chemin, e.g. ./script
}}}
!! {{{withinpath}}}
{{{
Tester si le chemin absolu $2 se trouve dans le chemin absolu "$1" (appelée
barrière). Soit un chemin P, on considère que P est dans P. Si ce comportement
n'est pas souhaité, $3(=N) doit valoir O, auquel cas P est dans Q implique que
P != Q.
}}}
!! {{{safe_abspath}}}
{{{
Afficher le chemin absolu de $1, par rapport à $2, si et seulement si le
chemin résultat ne se trouve pas en dehors de la barrière $3. Si $2 n'est pas
spécifié, prendre le répertoire courant. S'il est relatif, l'exprimer par
rapport au répertoire courant. Si $3 est relatif, l'exprimer par rapport à $2.
Si le chemin résultat est sité en dehors de la barrière, ne rien afficher et
retourner un code d'erreur.
Si le chemin $1 n'existe pas, il n'est PAS normalisé. Sinon, les meilleurs
efforts sont faits pour normaliser le chemin résultat.
}}}
!! {{{safe_relpath}}}
{{{
Afficher le chemin relatif de $1 par rapport à $2 si et seulement si le chemin
résultat ne se trouve pas en dehors de la barrière $3. Si $2 n'est pas
spécifié, prendre le répertoire courant. S'il est relatif, l'exprimer par
rapport au répertoire courant. Si $3 est relatif, l'exprimer par rapport à $2.
Si le chemin résultat est sité en dehors de la barrière, ne rien afficher et
retourner un code d'erreur.
}}}
!! {{{splitwcs}}}
{{{
Découper un nom de chemin $1 entre la partie sans wildcards, qui est placée dans
la variables $2(=basedir), et la partie avec wildcards, qui est placée dans la
variable $3(=filespec)
}}}
!! {{{deref}}}
{{{
Retourner un chemin absolu vers le fichier $1, dans lequel toutes les
composantes "lien symbolique" ont été supprimées.
DEPRECATED: Cette fonction est dépréciée. Utiliser à la place readlinkm()
}}}
!! {{{readlinka}}}
{{{
Afficher un chemin absolu vers la destination du fichier $1. Si $1 n'est pas
un lien, afficher simplement le chemin du fichier
}}}
!! {{{readlinkm}}}
{{{
Retourner un chemin absolu vers le fichier $1, dans lequel toutes les
composantes "lien symbolique" ont été supprimées. Il n'est pas requis que les
composantes du chemin existent.
}}}
!! {{{path_if_test}}}
{{{
afficher un chemin si le fichier $2 existe (en utilisant l'opérateur $1) dans
l'un des chemins absolus $4..n. si $3==relative, afficher le chemin relatif,
sinon le chemin absolu. note: $3 peut être de la forme relative:path, auquel
cas le chemin affiché est exprimé relativement à path
}}}
!! {{{update_link}}}
{{{
mettre à jour le lien $2 pour qu'il pointe vers le fichier $1
}}}
!! {{{update_links}}}
{{{
Mettre à jour les liens $2..@ pour qu'ils pointent vers la nouvelle
destination $1
}}}
!! {{{move_link}}}
{{{
Déplacer le lien $1 vers $2, et mettre à jour la destination du lien si
elle est exprimée de façon relative
Si $1 n'est pas un lien, le déplacer normalement avec mv
}}}
!! {{{copy_link}}}
{{{
Copier le lien $1 vers $2, et mettre à jour la destination du lien si
elle est exprimée de façon relative
Si $1 n'est pas un lien, le copier normalement avec cp
}}}
!! {{{array_find_links}}}
{{{
Chercher dans le répertoire $3 (qui est par défaut le répertoire courant)
les liens vers le fichier $2, et ajouter leurs chemins absolus dans le
tableau $1
}}}
!! {{{list_links}}}
{{{
Chercher dans le répertoire $2 les liens vers le fichier $1, et les
afficher, un par ligne.
}}}
!! {{{move_file}}}
{{{
Déplacer le fichier $1 vers $2, et mettre à jour les liens $3..@ pour
qu'ils pointent vers la nouvelle destination
}}}
!! {{{get_nblines}}}
{{{
Afficher le nombre de lignes d'un fichier
}}}
!! {{{mktempf}}}
{{{
générer un fichier temporaire et retourner son nom
}}}
!! {{{mktempd}}}
{{{
générer un répertoire temporaire et retourner son nom
}}}
!! {{{mkdirof}}}
{{{
Créer le répertoire correspondant à un fichier
}}}
!! {{{cp_a}}}
{{{
copier des fichiers en gardant le maximum de propriétés
}}}
!! {{{cp_R}}}
{{{
copier des fichiers récursivement, en suivant les liens symboliques
}}}
!! {{{quietgrep}}}
{{{
tester la présence d'un pattern dans un fichier
}}}
!! {{{quietdiff}}}
{{{
tester si deux fichiers sont identiques
}}}
!! {{{testsame}}}
{{{
tester si deux fichiers sont identiques/différents
}}}
!! {{{testdiff}}}
!! {{{testupdated}}}
{{{
test si $2 n'existe pas ou si $1 est différent de $2
}}}
!! {{{testnewer}}}
{{{
test si $2 n'existe pas ou si $1 est plus récent que $2
}}}
!! {{{ps_all}}}
{{{
afficher tous les processus avec le maximum d'informations
}}}
!! {{{progexists}}}
{{{
tester l'existence d'un programme dans le PATH
}}}
!! {{{has_python}}}
{{{
tester la présence de python
}}}
!! {{{has_gawk}}}
{{{
tester la présence de gnuawk
}}}
!! {{{is_root}}}
{{{
tester si on est root
}}}
!! {{{source_ifexists}}}
{{{
sourcer un fichier s'il existe
}}}
!! {{{is_running}}}
{{{
tester si un programme dont on donne le PID tourne
}}}
!! {{{sedi}}}
{{{
Lancer sed sur un fichier en le modifiant en place
}}}
!! {{{csort}}}
{{{
Lancer sort avec LANG=C pour éviter les problèmes avec la locale. en effet,
avec LANG!=C, sort utilise les règles de la locale pour le tri, et par
exemple, avec LANG=fr_FR.UTF-8, la locale indique que les ponctuations doivent
être ignorées.
}}}
!! {{{lsort}}}
!! {{{cgrep}}}
{{{
Lancer grep avec LANG=C pour éviter les problèmes avec la locale. cf csort
pour une explication.
}}}
!! {{{lgrep}}}
!! {{{csed}}}
{{{
Lancer sed avec LANG=C pour éviter les problèmes avec la locale. cf csort pour
une explication.
}}}
!! {{{lsed}}}
!! {{{cawk}}}
{{{
Lancer awk avec LANG=C pour éviter les problèmes avec la locale. cf csort pour
une explication.
}}}
!! {{{lawk}}}
!! {{{cdiff}}}
{{{
Lancer diff avec LANG=C pour éviter les problèmes avec la locale. cf csort
pour une explication.
}}}
!! {{{ldiff}}}
!! {{{fix_mode}}}
{{{
Si le fichier $1 n'est pas writable, le rendre writable temporairement. Si
nécessaire, le fichier est créé.
Cette fonction s'utilise de cette façon:
mode="$(fix_mode file)"
...
unfix_mode file "$mode"
}}}
!! {{{unfix_mode}}}
{{{
Restaurer le mode $2 du fichier $1 traité par fix_mode
}}}
!! {{{get_mode}}}
{{{
Obtenir le mode du fichier $1, en le créant si nécessaire. A utiliser avec
unfix_mode pour restaurer le mode d'un fichier qui a été traité avec un
fichier temporaire intermédiaire
}}}
!! {{{rm_maybe}}}
{{{
Supprimer les fichiers dont on donne la liste. Si aucun fichier n'est
spécifié, cette fonction est un NOP
}}}
!! {{{cpdir}}}
{{{
copier un fichier dans un répertoire, ou le contenu d'un répertoire dans un
autre répertoire, que le répertoire source soit un lien symbolique ou
non. Cette fonction existe parce que le comportement de "cp_a src dest" n'est
pas consistant selon les plateformes, surtout si src est un lien symbolique
sur un répertoire: parfois on copie le lien, parfois on copie le contenu du
répertoire, parfois on copie le répertoire...
La copie est faite avec rsync si possible. Les options du tableau
__CPDIR_RSYNC_ARGS sont rajoutées aux options standard de rsync.
}}}
!! {{{cpnovcs}}}
{{{
copier le fichier/répertoire $1 *dans* le *répertoire* $2 avec rsync. Les
options du tableau __CPNOVCS_RSYNC_ARGS sont rajoutées aux options standard
de rsync.
Si $1 est un répertoire, la copie est faite en ignorant les sous-répertoires
de VCS (.svn, CVS). En ce qui concerne les répertoire de VCS, git aussi est
supporté, mais uniquement s'il est à la racine du transfert.
Si $1 se termine par un '/', c'est le contenu du répertoire qui est copié, pas
le répertoire lui-même. Si rsync n'est pas trouvé sur le système, alors on
fait une copie standard qui inclue les répertoires de VCS.
}}}
!! {{{cpvcs}}}
{{{
comme cpnovcs, mais ne pas ignorer les répertoires de VCS
}}}
!! {{{cpdirnovcs}}}
{{{
Le pendant de cpdir, mais en ignorant les sous-répertoires de VCS: copier le
contenu du répertoire $1 dans le répertoire $2
}}}
!! {{{doinplace}}}
{{{
Filtrer le fichier $1 à travers la commande $2..$*, puis remplacer le fichier
s'il n'y a pas eu d'erreur. Retourner le code d'erreur de la commande. Si $1
n'est pas spécifié ou vaut -, filtrer l'entrée standard vers la sortie
standard.
La variante doinplacef remplace le fichier quelque soit le code de retour de
la commande. A utiliser avec des commandes comme grep qui peuvent retourner
FAUX s'ils ne trouvent pas le motif
}}}
!! {{{doinplacef}}}
!! {{{stripnl}}}
{{{
Supprimer les caractères de fin de ligne de la chaine en entrée
}}}
!! {{{nl2lf}}}
!! {{{nl2crlf}}}
!! {{{nl2cr}}}
!! {{{list_all}}}
{{{
Lister les fichiers ou répertoires du répertoire $1, un par ligne
Les répertoires . et .. sont enlevés de la liste
$1=un répertoire dont le contenu doit être listé
$2..@=un ensemble de patterns pour le listage
}}}
!! {{{list_files}}}
{{{
Lister les fichiers du répertoire $1, un par ligne
$1=un répertoire dont le contenu doit être listé.
$2..@=un ensemble de patterns pour le listage
}}}
!! {{{list_dirs}}}
{{{
Lister les répertoires du répertoire $1, un par ligne
Les répertoires . et .. sont enlevés de la liste
$1=un répertoire dont le contenu doit être listé.
$2..@=un ensemble de patterns pour le listage
}}}
!! {{{array_lsall}}}
{{{
Lister les fichiers avec `list_all $2 $3...`, et les mettre dans le
tableau $1. Le tableau contient les chemins complets, par seulement les
noms comme avec list_all
}}}
!! {{{array_lsdirs}}}
{{{
Lister les fichiers avec `list_dirs $2 $3...`, et les mettre dans le
tableau $1. Le tableau contient les chemins complets, par seulement les
noms comme avec list_dirs
}}}
!! {{{array_lsfiles}}}
{{{
Lister les fichiers avec `list_files $2 $3...`, et les mettre dans le
tableau $1. Le tableau contient les chemins complets, par seulement les
noms comme avec list_files
}}}
!! {{{filter_empty}}}
{{{
Filtrer l'entrée standard en enlevant les lignes vides
}}}
!! {{{filter_vcspath}}}
{{{
L'entrée standard étant une liste de chemins, filtrer les fichiers et
répertoire qui ont un rapport avec subversion ou git
}}}
!! {{{merge_contlines}}}
{{{
Avec les lignes lues sur stdin, fusionner celles qui se terminent par \ avec
les suivantes.
}}}
!! {{{filter_comment}}}
{{{
Filtrer un fichier de configuration lu sur stdin en enlevant les commentaires
et les lignes vides.
Avec $1==-m, fusionner les lignes qui se terminent par \ avec les suivantes
Comme filter_conf(), les commentaires doivent être sur une ligne à part.
Contrairement à filter_conf, il n'est pas nécessaire que le caractère '#' soit
en début de ligne: il peut apparaitre après des espaces et des tabulations. De
même, une ligne qui ne contient que des espaces et des tabulations est
considérée comme vide.
}}}
!! {{{filter_conf}}}
{{{
filtrer un fichier de configuration lu sur stdin en enlevant les commentaires
et les lignes vides. Une ligne n'est considérée commentaire que si '#' est un
première position. Utiliser filter_comment() si les commentaire peuvent
commencer par des caractères espace et tabulation.
Si $1==-m, fusionner les lignes qui se terminent par \ avec les suivantes
}}}
!! {{{is_archive}}}
{{{
tester si l'extension d'un fichier indique que c'est une archive
}}}
!! {{{extract_archive}}}
{{{
Extraire le contenu de l'archive $1 dans le répertoire ${2:-.}
}}}
!! {{{get_archive_basename}}}
{{{
Obtenir le nom de base de l'archive $1
}}}
!! {{{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
--> app
}}}
!! {{{get_archive_versionsuffix}}}
{{{
Obtenir la valeur probable de la version de l'application ou du framework
contenu dans l'archive $1, avec le caractère de séparation, e.g:
get_archive_versionsuffix app-0.1.tgz
--> -0.1
}}}
!! {{{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
--> 0.1
}}}
!! {{{dump_usernames}}}
{{{
Placer dans le tableau $1 la liste des utilisateurs du système
Cette implémentation consulte /etc/passwd et liste tous les utilisateurs dont
le homedir se trouve dans /home, et dont l'uid est >=500
}}}
!! {{{resolv_ips}}}
{{{
Placer dans le tableau $1(=ips) la liste des adresses ip correspondant à
l'hôte $2. La résolution est effectuée avec la commande host.
}}}
!! {{{resolv_hosts}}}
{{{
Placer dans le tableau $1(=hosts) la liste des hôtes correspondant à
l'adresse ip $2. La résolution est effectuée avec la commande host.
}}}
!! {{{runscript_as}}}
{{{
Utiliser bash pour lancer le script $2 avec les arguments $3..$n afin qu'il
tourne avec les droits d'un autre user $1(=root). Si $2=exec, utiliser exec
pour lancer le script et ses arguments qui commencent à partir de $3, ce qui
fait que cette fonction ne retourne pas.
Attention! cette fonction ne teste pas avec si on est déjà le user $1. Il y a
donc un risque de boucle infinie si on ne teste pas le user courant.
}}}
!! {{{runscript_as_root}}}
{{{
Utiliser bash pour lancer le script $1 avec les arguments $2..$* avec les
droits de root. Si on est déjà en root, le script est simplement lancé. Sinon,
utiliser runscript_as pour lancer le script avec les droits de root.
}}}
!! {{{run_as}}}
{{{
Relancer le script courant afin qu'il tourne avec les droits d'un autre user
$1(=root)
Attention! cette fonction ne teste pas avec si on est déjà ce user. Il y a
donc un risque de boucle infinie si on ne teste pas le user courant.
Il faut lancer cette fonction avec les arguments du script en cours. Par
exemple::
run_as root "$@"
Si $2=--noexec, on n'utilise pas la fonction exec, ce qui fait que la fonction
retourne. Sinon, on peut considérer que cette fonction ne retourne jamais
}}}
!! {{{run_as_root}}}
{{{
relancer le script courant afin qu'il tourne en root si on est pas en déjà
root. Sinon, cette fonction est un nop.
}}}
!! {{{check_user}}}
{{{
Vérifier si le user courant est l'un des users $1..*
}}}
!! {{{ensure_user}}}
{{{
Vérifier si le user courant est l'un des users $1..N où N est la position du
premier "--". Si ce n'est pas le cas et que l'on est root, relancer le script
avec ce user grâce à la fonction run_as()
Retourner 1 si ce n'était pas le bon user. Retourner 10 si ce n'était pas le
bon user et que l'on n'est pas root (donc impossible à priori de relancer le
script avec le bon user). Retourner 11 si l'utilisateur a choisi de ne pas
lancer le script avec le bon utilisateur
A utiliser de cette manière:
if ensure_user users... -- args; then
# ... on est avec le bon user; faire les opérations
else
# ... ce code n'est exécuté que si une erreur s'est produite, ou si ce
# n'était pas le bon user et que l'option --noexec est utilisée
fi
}}}
!! {{{check_hostname}}}
{{{
Vérifier si le hostname courant est l'un des hôtes $1..*
localhost matche toujours
}}}
!! {{{check_userhostname}}}
{{{
Vérifier si le hostname et éventuellement le user courant sont l'un des
arguments $1..*
Chaque argument est de la forme [user@]host, mais le test ne tient compte que
du nom de l'hôte, sans tenir compte du domaine. Si le user n'est pas spécifié,
le test ne porte que sur hostname.
}}}
!! {{{ensure_hostname}}}
{{{
Vérifier si le hostname et le user courant sont l'un des arguments $1..*
Chaque argument est de la forme [user@]host, mais le test ne tient compte que
du nom de l'hôte, sans tenir compte du domaine.
Si user est spécifié:
- Si on est sur le bon hôte mais pas le bon user, ensure_user est lancé avec
l'argument approprié pour relancer le script
Si l'argument était de la forme userhost:path, le répertoire courant est
changé avant de lancer le script avec le bon utilisateur.
Sinon (si user n'est pas spécifié):
- Si on n'est pas sur le bon hôte, après confirmation le script est lancé avec
ssh sur l'hôte distant avec le user spécifié (qui vaut par défaut root). Ce
script DOIT exister sur l'hôte distant avec le même chemin.
Si l'argument était de la forme userhost:path, le répertoire courant distant
est changé avant de lancer le script
Si on est avec le bon user sur le bon hôte, le répertoire courant n'est jamais
changé.
Retourner 1 si ce n'était pas le bon user. Retourner 10 si ce n'était pas le
bon user et que l'on n'est pas root (donc impossible à priori de relancer le
script avec le bon user). Retourner 11 si l'utilisateur a choisi de ne pas
lancer le script sur l'hôte distant. Retourner 12 si une erreur s'est produite
avec ssh.
A utiliser de cette manière:
if ensure_hostname user@host... -- args; then
# ... on est [avec le bon user] sur le bon hôte; faire les opérations
else
# ... ce code n'est exécuté que si une erreur s'est produite, ou si ce
# n'était pas le bon user et que l'option --noexec est utilisée
fi
}}}
!! {{{sqvals}}}
!! {{{quoted_values}}}
!! {{{formatcsv}}}
!! {{{awkdef}}}
{{{
Afficher un script à insérer au début d'un script awk. Ce script définit dans
une section BEGIN{} les variables donnés en arguments, et avec l'option -f,
des fonctions utiles. Si une valeur ne ressemble pas à une définition de
variable, l'analyse des variables s'arrête et le reste des arguments est
inséré tel quel. Cette fonction peut être utilisée de cette manière:
awk "$(awkdef -f var=value... 'script awk')"
Normalement, les variables définies sont scalaires, avec une syntaxe de la
forme var[:type]=value. type peut valoir str ou int, pour forcer le type de la
variable créée dans awk.
Il est possible d'utiliser la syntaxe awk_array[@]=bash_array ou array[@] (qui
est équivalente à array[@]=array) pour initialiser le tableau awk_array, qui
contiendra toute les valeurs du tableau nommé bash_array, avec les indices de
1 à N, N étant le nombre d'éléments du tableau bash_array. La variable
awk_array_count est aussi initialisée, et contient le nombre d'éléments du
tableau
La syntaxe "awk_array[@]=<\n..." permet de spécifier les valeurs du tableau,
une par ligne, e.g:
$'values[@]=<\nvalue1\nvalue2'
pour un tableau values qui contiendra deux valeurs: value1 et value2
Avec l'option -f, des fonctions supplémentaires sont définies. Elles sont
décrites dans le module awk.
}}}
!! {{{lawkrun}}}
{{{
wrapper pour lancer awk avec un script préparé par awkdef. Les définitions et
les arguments sont séparés par --, e.g.
awkrun var0=value0 var1=value1 script -- input0 input1
}}}
!! {{{cawkrun}}}
!! {{{awkrun}}}
!! {{{lf_trylock}}}
{{{
USAGE
lf_trylock [-h max_hours] /path/to/lockfile
OPTIONS
lockfile
fichier qui doit contenir le verrou
-h max_hours
Nombre d'heures (par défaut 4) au bout duquel afficher stale
Sinon, afficher locked
Retourne 0 si le verrou a été placé correctement. Il ne faut pas oublier de
supprimer le fichier. Le mieux est de le faire supprimer automatiquement par
autoclean:
lockfile=...
case "$(lf_trylock "$lockfile")" in
locked) ...;;
stale) ...;;
esac
autoclean "$lockfile"
Sinon, retourner 1 et afficher l'une des deux valeurs suivantes:
- stale si le verrou a déjà été placé, depuis au moins max_hours heures
- locked si le verrou a déjà été placé
- retry si une erreur s'est produite pendant la pose du verrou ou sa
lecture. Cela peut se produire si les droits ne sont pas suffisants pour
écrire dans le répertoire destination, ou si le fichier a été supprimé
avant sa lecture (race-condition). Dans ce dernier cas, reessayer permettra
d'acquérir le verrou
}}}
!! {{{pidfile_set}}}
{{{
USAGE
pidfile_set [-p pid] /path/to/pidfile
OPTIONS
pidfile
fichier qui doit contenir le pid du script
-p pid
spécifier le pid. par défaut, utiliser $$
-r si pidfile existe mais que le processus ne tourne plus, faire
comme si le fichier n'existe pas.
Retourner 0 si le pid a été correctement écrit dans le fichier. Ce fichier
sera supprimé automatiquement en fin de script
Retourner 1 si le fichier existe déjà et que le processus est en train de
tourner.
Retourner 2 si le fichier existe déjà mais que le processus ne tourne plus.
Retourner 10 si autre erreur grave s'est produite (par exemple, s'il manque le
chemin vers pidfile, ou si le fichier n'est pas accessible en écriture.)
}}}
!! {{{pidfile_check}}}
{{{
USAGE
pidfile_check /path/to/pidfile
OPTIONS
pidfile
fichier qui doit contenir le pid d'un processus
Cette fonction permet de vérifier si le processus associé à un fichier de pid
est en train de tourner.
Retourner 0 si le fichier de pid existe et que le process du pid spécifié est
en train de tourner. Retourner 1 sinon.
Retourner 10 si erreur grave s'est produite (par exemple, s'il manque le
chemin vers pidfile, ou si le fichier n'est pas accessible en lecture.)
}}}
!! {{{page_maybe}}}
{{{
Utiliser less, si possible, pour afficher le flux en entrée. Si le terminal
n'est pas interactif ou si le nombre de lignes en entrée est inférieur au
nombre de lignes du terminal, afficher simplement le flux.
Les arguments de cette fonction sont passés à less
}}}
!! {{{utools_local}}}
{{{
Afficher les commandes pour rendre locales certaines variables en fonction des
arguments:
- opts rend locale args, pour utiliser parse_opts() à l'intérieur d'une
fonction.
- verbosity et interaction rendent respectivement locales __verbosity et
__interaction. Ceci est utile pour pouvoir appeler sans risque de pollution
de l'environnement une fonction qui utilise parse_opts() avec les
définitions de PRETTYOPTS.
Si aucun arguments n'est fourni, toutes les définitions sont affichées.
}}}
!! {{{stdredir}}}
{{{
Lancer la commande $4..@ en redirigeant stdin depuis $1, stdout vers $2,
stderr vers $3. Si $1 est vide ou vaut /dev/stdin, la redirection n'est
pas faite. Si $2 est vide ou vaut /dev/stdout, la redirection n'est pas
faite. Si $3 est vide ou vaut /dev/stderr, la redirection n'est pas faite.
Cette fonction existe parce que sur certaines versions de bash, il semble
que les redirections /dev/std* ne sont pas traitées de façon particulière.
De plus, sur des technologies telles que OpenVZ, les chemins /dev/std* ne
sont pas créés (parce que /proc/self/fd/* n'est pas accessible). Donc,
dans de rares cas où le script tourne sur OpenVZ avec une version de bash
qui est buggée, la redirection n'est pas faite correctement.
}}}
!! {{{isatty}}}
{{{
tester si STDOUT n'est pas une redirection
}}}
!! {{{in_isatty}}}
{{{
tester si STDIN n'est pas une redirection
}}}
!! {{{out_isatty}}}
{{{
tester si STDOUT n'est pas une redirection
}}}
!! {{{err_isatty}}}
{{{
tester si STDERR n'est pas une redirection
}}}
!! {{{die}}}
!! {{{die_unless}}}
{{{
Afficher $-1 et quitter le script avec die() si la commande $1..-2 retourne
FAUX
}}}
!! {{{eerror_unless}}}
{{{
Afficher $-1 avec eerror() et retourner $? si la commande $1..-2 retourne FAUX
}}}
!! {{{die_if}}}
{{{
Afficher $-1 et quitter le script avec die() si la commande $1..-2 retourne
VRAI
}}}
!! {{{eerror_if}}}
{{{
Afficher $-1 avec eerror() et retourner le code d'erreur 1 si la commande
$1..-2 retourne VRAI
}}}
!! {{{noerror}}}
{{{
lancer la commande "$@" et masquer son code de retour
}}}
!! {{{noout}}}
{{{
lancer la commande "$@" en supprimant sa sortie standard
}}}
!! {{{noerr}}}
{{{
lancer la commande "$@" en supprimant sa sortie d'erreur
}}}
!! {{{tooenc}}}
{{{
Transformer la valeur $1 de l'encoding $2(=$OENC) vers l'encoding de sortie
$3=($UTOOLS_OUTPUT_ENCODING)
}}}
!! {{{uecho}}}
!! {{{tooenc_}}}
{{{
Transformer la valeur $1 de l'encoding $2(=$OENC) vers l'encoding de sortie
$3=($UTOOLS_OUTPUT_ENCODING)
}}}
!! {{{uecho_}}}
!! {{{toienc}}}
{{{
Transformer la valeur $1 de $2(=$IENC) vers l'encoding d'entrée
$3(=$UTOOLS_INPUT_ENCODING)
}}}
!! {{{uread}}}
{{{
Lire une valeur sur stdin et la placer dans la variable $1. On assume que la
valeur en entrée est encodée dans l'encoding d'entrée par défaut
}}}
!! {{{stooenc}}}
{{{
Transformer la valeur lue sur stdin de $OENC vers l'encoding de sortie par
défaut ($UTOOLS_OUTPUT_ENCODING)
}}}
!! {{{stoienc}}}
{{{
Transformer la valeur lue sur stdin de $IENC vers l'encoding d'entrée par
défaut ($UTOOLS_INPUT_ENCODING)
}}}
!! {{{elogto}}}
{{{
Activer UTOOLS_EDATE et rediriger STDOUT et STDERR vers le fichier $1
Si deux fichiers sont spécifiés, rediriger STDOUT vers $1 et STDERR vers $2
Si aucun fichier n'est spécifié, ne pas faire de redirection
Si la redirection est activée, forcer l'utilisation de l'encoding UTF8
Si UTOOLS_ELOG_OVERWRITE=1, alors le fichier en sortie est écrasé. Sinon, les
lignes en sortie lui sont ajoutées
}}}
!! {{{set_verbosity}}}
!! {{{set_interaction}}}
!! {{{show_error}}}
{{{
tester respectivement si on doit afficher les messages d'erreur,
d'avertissement, d'information, de debug
}}}
!! {{{show_warn}}}
!! {{{show_info}}}
!! {{{show_verbose}}}
!! {{{show_debug}}}
!! {{{check_verbosity}}}
!! {{{get_verbosity_option}}}
!! {{{check_interaction}}}
!! {{{is_interaction}}}
!! {{{get_interaction_option}}}
!! {{{eflush}}}
{{{
Afficher les messages en attente
}}}
!! {{{eclearp}}}
{{{
Supprimer les message en attente
}}}
!! {{{eerror}}}
{{{
Afficher un message d'erreur
}}}
!! {{{ewarn}}}
{{{
Afficher un message d'avertissement
}}}
!! {{{enote}}}
{{{
Afficher un message d'information de même niveau qu'un avertissement
}}}
!! {{{ebanner}}}
{{{
Afficher un message très important encadré, puis attendre 5 secondes
}}}
!! {{{eimportant}}}
{{{
Afficher un message très important
}}}
!! {{{eattention}}}
{{{
Afficher un message important
}}}
!! {{{einfo}}}
{{{
Afficher un message d'information
}}}
!! {{{eecho}}}
{{{
Afficher un message d'information sans préfixe
}}}
!! {{{eecho_}}}
!! {{{edebug}}}
{{{
Afficher un message de debug
}}}
!! {{{trace}}}
{{{
Afficher la commande $1..@, la lancer, puis afficher son code d'erreur si une
erreur se produit
}}}
!! {{{trace_error}}}
{{{
Lancer la commande $1..@, puis afficher son code d'erreur si une erreur se
produit. La différence avec trace() est que la commande n'est affichée que si
une erreur se produit.
}}}
!! {{{etitle}}}
{{{
Afficher le titre $1, qui est le début éventuel d'une section. Les section
imbriquées sont affichées indentées. La section n'est pas terminée, et il faut
la terminer explicitement avec eend, sauf dans certains cas précis:
- Si $2..$* est spécifié, c'est une commande. Lancer la commande dans le
contexte de la section. Puis, la section est automatiquement terminée sauf si
l'option -s est spécifiée, auquel cas la section reste ouverte. Si l'option -p
est spécifiée, eclearp() est appelé pour purger les messages en attente
- Dans le cas contraire, l'option -s est ignorée: la section doit toujours
être terminée explicitement.
La fonction etitled() est comme etitle(), mais le titre n'est pas affiché
immédiatement. L'affichage effectif est effectué dès qu'une fonction e* est
utilisée. Ceci permet, avec la fonction eclearp(), de ne pas afficher de titre
pour une section vide.
}}}
!! {{{etitled}}}
!! {{{estep}}}
{{{
Afficher la description d'une opération. Cette fonction est particulièrement
appropriée dans le contexte d'un etitle.
Les variantes e (error), w (warning), n (note), i (info) permettent d'afficher
des couleurs différentes, mais toutes sont du niveau info.
}}}
!! {{{estepe}}}
!! {{{estepw}}}
!! {{{estepn}}}
!! {{{estepi}}}
!! {{{estep_}}}
!! {{{estepe_}}}
!! {{{estepw_}}}
!! {{{estepn_}}}
!! {{{estepi_}}}
!! {{{ebegin}}}
{{{
Afficher le message $1, qui décrit le début d'une opération. Cette fonction
débute une section, qu'il faut terminer avec eend.
Si $2..$* est spécifié, c'est une commande. Lancer la commande dans le
contexte de la section. Puis, la section est terminée automatiquement, sauf si
l'option -s est spécifiée, auquel cas la section reste ouverte.
}}}
!! {{{edot}}}
{{{
Afficher une étape d'une opération, matérialisée par un point '.' ou une
croix 'x' en cas de succès ou d'erreur. Cette fonction est particulièrement
appropriée dans le contexte d'un ebegin.
}}}
!! {{{edotw}}}
{{{
Afficher un avertissement comme étape d'une opération, matérialisée par une
lettre 'w' (typiquement de couleur jaune). Cette fonction est particulièrement
appropriée dans le contexte d'un ebegin.
}}}
!! {{{ewait}}}
{{{
Afficher les étapes d'une opération qui dure, matérialisées par des '+' toutes
les secondes tant que le processus $1 tourne.
A utiliser de cette manière:
ebegin "msg"
cmd &
ewait $!
eend
}}}
!! {{{eend}}}
{{{
Terminer une section.
Avec l'option -c, remettre à zéro toutes les informations de section
Si la section en cours est un ebegin, afficher la fin de l'opération: [ok] ou
[error] en fonction du code de retour de la dernière commande (ou de $1 si
cette valeur est donnée)
Si la section en cours est un etitle, marquer la fin de la section concernée
par le titre.
}}}
!! {{{elinedots}}}
{{{
Afficher un message comme avec ebegin "$1", puis afficher un point '.' pour
chaque ligne lue sur stdin. Cela permet de suivre une opération. En mode
DEBUG, afficher la ligne affichée plutôt qu'un point.
Si $2..$* sont spécifiés, lancer la commande et suivre sa sortie. Ainsi,
'elinedots msg cmd args' est un raccourci pour 'cmd args | elinedots msg'
}}}
!! {{{ask_yesno}}}
{{{
Afficher le message $1 suivi de [oN] ou [On] suivant que $2 vaut O ou N, puis
lire la réponse. Retourner 0 si la réponse est vrai, 1 sinon.
Si $1 est une option, elle est utilisée avec check_interaction pour savoir si
on est en mode interactif ou non. A ce moment-là, les valeurs sont décalées
($2=message, $3=default)
Si $2 vaut C, la valeur par défaut est N si on est interactif, O sinon
Si $2 vaut X, la valeur par défaut est O si on est interactif, N sinon
}}}
!! {{{read_value}}}
{{{
Afficher le message $1 suivi de la valeur par défaut [$3] si elle est non
vide, puis lire la valeur donnée par l'utilisateur. Cette valeur doit être non
vide si $4(=O) est vrai. La valeur saisie est placée dans la variable
$2(=value)
Si $1 est une option, elle est utilisée avec check_interaction pour savoir si
on est en mode interactif ou non. A ce moment-là, les valeurs sont décalées
($2=message, $3=variable, $4=default, $5=required)
En mode non interactif, c'est la valeur par défaut qui est sélectionnée. Si
l'utilisateur requière que la valeur soit non vide et que la valeur par défaut
est vide, afficher un message d'erreur et retourner faux
read_password() est comme read_value(), mais la valeur saisie n'est pas
affichée, ce qui la rend appropriée pour la lecture d'un mot de passe.
}}}
!! {{{read_password}}}
!! {{{simple_menu}}}
{{{
Afficher un menu simple dont les éléments sont les valeurs du tableau
$2(=options). L'option choisie est placée dans la variable $1(=option)
-t TITLE: spécifier le titre du menu
-m YOUR_CHOICE: spécifier le message d'invite pour la sélection de l'option
-d DEFAULT: spécifier l'option par défaut. Par défaut, prendre la valeur
actuelle de la variable $1(=option)
}}}
!! {{{actions_menu}}}
{{{
Afficher un menu dont les éléments sont les valeurs du tableau $4(=options),
et une liste d'actions tirées du tableau $3(=actions). L'option choisie est
placée dans la variable $2(=option). L'action choisie est placée dans la
variable $1(=action)
Un choix est saisi sous la forme [action]num_option
-t TITLE: spécifier le titre du menu
-m OPT_YOUR_CHOICE: spécifier le message d'invite pour la sélection de
l'action et de l'option
-M ACT_YOUR_CHOICE: spécifier le message d'invite dans le cas où aucune option
n'est disponible. Dans ce cas, seules les actions vides sont possibles.
-e VOID_ACTION: spécifier qu'une action est vide, c'est à dire qu'elle ne
requière pas d'être associée à une option. Par défaut, la dernière action
est classée dans cette catégorie puisque c'est l'action "quitter"
-d DEFAULT_ACTION: choisir l'action par défaut. par défaut, c'est la première
action.
-q QUIT_ACTION: choisir l'option "quitter" qui provoque la sortie du menu sans
choix. par défaut, c'est la dernière action.
-o DEFAULT_OPTION: choisir l'option par défaut. par défaut, prendre la valeur
actuelle de la variable $2(=option)
}}}
!! {{{autoclean}}}
{{{
Ajouter $1..$n à la liste des fichiers à supprimer à la fin du programme
}}}
!! {{{ac_cleanall}}}
{{{
Supprimer *tous* les fichiers temporaires gérés par autoclean tout de suite.
}}}
!! {{{ac_clean}}}
{{{
Supprimer les fichier temporaires $1..$* si et seulement s'ils ont été générés
par ac_set_tmpfile ou ac_set_tmpdir
}}}
!! {{{ac_set_tmpfile}}}
{{{
Créer un fichier temporaire avec le motif $2, l'ajouter à la liste des
fichiers à supprimer en fin de programme, et mettre sa valeur dans la
variable $1
En mode debug, si ($5 est vide ou ${!5} est une valeur vraie), et si $3 n'est
pas vide, prendre ce fichier au lieu de générer un nouveau fichier
temporaire. Si $4==keep, ne pas écraser le fichier $3 s'il existe.
}}}
!! {{{ac_set_tmpdir}}}
{{{
Créer un répertoire temporaire avec le motif $2, l'ajouter à la liste des
fichiers à supprimer en fin de programme, et mettre sa valeur dans la
variable $1
En mode debug, si ($4 est vide ou ${!4} est une valeur vraie), et si $3 n'est
pas vide, prendre ce nom de répertoire au lieu de créer un nouveau répertoire
temporaire
}}}
!! {{{debug_tee}}}
{{{
En mode debug, passer le flux à travers la commande 'tee "$@"'. Sinon, le flux
est passé inchangé.
}}}
!! {{{get_user_defaults_file}}}
{{{
Afficher le chemin vers le fichier utilisateur à éditer pour qu'il soit chargé
par 'set_defaults $1'. Ce fichier n'existe pas forcément; il faut peut-être le
créer.
}}}
!! {{{get_defaults_files}}}
{{{
Initialiser le tableau $1(=defaults) avec la liste des fichiers qui seraient
chargés par la commande 'set_defaults $2..N'
}}}
!! {{{set_defaults}}}
{{{
Pour chaque argument, sourcer /etc/default/$arg *et* (en priorité
~/etc/default.$HOSTNAME/$arg ou à défaut ~/etc/default/$arg) si ceux-ci
existent. *Sinon*, lire $scriptdir/lib/default/$arg si ce fichier existe
}}}
!! {{{myhost}}}
{{{
Afficher le nom d'hôte pleinement qualifié, en faisant appel à la commande
hostname. Par comparaison, $MYHOST est fourni par bash.
}}}
!! {{{myhostname}}}
{{{
Afficher le nom d'hôte sans domaine, en faisant appel à la commande
hostname. Par comparaison, $MYHOSTNAME est fourni par bash.
}}}
!! {{{is_cgi}}}
{{{
Tester si on est lancé comme un script CGI
}}}
!! {{{ctype_header}}}
{{{
Générer une en-tête Content-Type: avec la valeur $1[=text/html]
}}}
!! {{{cdisp_header}}}
{{{
Générer une en-tête Content-Disposition: avec le type $2[=attachment] et
le nom de fichier $1[=result]
}}}
!! {{{nocache_header}}}
{{{
Générer des en-têtes qui désactivent la mise en cache du contenu
}}}
!! {{{cgicontent}}}
{{{
Générer les en-têtes nécessaire avant de servir le contenu.
$1(=text/html) est le type de contenu. S'il faut servir le contenu avec
une disposition "attachment", $2 est le nom de fichier à proposer à
l'utilisateur. Si $3 est spécifié, c'est le chemin vers le fichier dont le
contenu doit être servi.
$4..* sont des en-têtes supplémentaires à rajouter
}}}
!! {{{cgicontent_nocache}}}
{{{
Générer les en-têtes nécessaire avant de servir le contenu. Rajouter les
entêtes pour désactiver la mise en cache.
$1(=text/html) est le type de contenu. S'il faut servir le contenu avec
une disposition "attachment", $2 est le nom de fichier à proposer à
l'utilisateur. Si $3 est spécifié, c'est le chemin vers le fichier dont le
contenu doit être servi.
$4..* sont des en-têtes supplémentaires à rajouter
}}}
!! {{{cgierror}}}
{{{
Afficher les en-têtes pour désactiver la mise en cache, puis afficher un
message d'erreur puis arrêter le script
}}}
!! {{{cgiredirect}}}
{{{
Afficher les en-têtes pour rediriger le client vers la page $1 puis
arrêter le script
}}}
!! {{{cgiparams}}}
!! {{{cgilsxml}}}
!! {{{cgiupload}}}
!! {{{conf_enable}}}
{{{
Dans le fichier de configuration $1, activer les paramètres $2..*
Chaque argument de cette fonction correspond à une directive du fichier de
configuration et doit être de la forme name[=value]
Dans tous les cas, toutes les directives de ce nom sont recherchées et
décommentées. Si value est précisée, les directives sont mises à jour. Si
la directive ne figure pas dans le fichier, elle y est rajoutée à la fin
avec la valeur spécifiée.
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.
}}}
!! {{{conf_disable}}}
{{{
Dans le fichier de configuration $1, désactiver les paramètres $2..*
Chaque argument de cette fonction correspond à une directive du fichier de
configuration et doit être de la forme name[=value]
Toutes les directives de ce noms sont recherchées et commentées. La valeur
si elle est spécifiée, est ignorée. Si la directive ne figure pas dans le
fichier, c'est un NOP.
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
}}}
!! {{{conf_append}}}
{{{
Dans le fichier de configuration $1, augmenter les valeurs des variables
correspondant aux paramètres $2..*
Chaque argument de cette fonction correspond à une variable du fichier de
configuration, et doit être de la forme name=value
Une ligne 'name="${name:+$name:}$value"' est générée à la fin du fichier
de configuration.
Par défaut, le séparateur CONF_APPEND_SEP vaut ':', mais il est possible
de changer cette valeur, de façon globale
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
}}}
!! {{{conf_array_append}}}
{{{
Dans le fichier de configuration $1, augmenter les valeurs des variables
de tableau correspondant aux paramètres $2..*
Chaque argument de cette fonction correspond à une variable du fichier de
configuration, et doit être de la forme name=value
Une ligne name=("${name[@]}" "$value") est générée à la fin du fichier de
configuration
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
}}}
!! {{{conf_check}}}
{{{
Dans le fichier de configuration $1, tester si tous les paramètres $2..*
sont présents.
Chaque argument de cette fonction correspond à une variable du fichier de
configuration, et doit être de la forme name[=value]
Si une valeur est spécifiée, vérifier que le fichier contient la valeur
correspondante. Sinon, tester uniquement la présence de la directive.
}}}
!! {{{aconf_enable}}}
{{{
Dans le fichier de configuration $1, activer les paramètres $2..*
Chaque argument de cette fonction correspond à une directive du fichier de
configuration et doit être de la forme name[=value]
Toutes les directives de ce nom sont recherchées et décommentées, et la
valeur mise à jour. Si la directive ne figure pas dans le fichier, elle y
est rajoutée à la fin. A cause du mode opératoire, cette fonction ne
convient pas pour les directives dont le nom peut apparaitre plusieurs
fois dans le fichier
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
}}}
!! {{{aconf_disable}}}
{{{
Dans le fichier de configuration $1, désactiver les paramètres $2..*
Chaque argument de cette fonction correspond à une directive du fichier de
configuration et doit être de la forme name[=value]
Si la valeur est précisée, la directive correspondant à ce nom et cette
valeur est recherchée et commentée. Sinon, toutes les directives de ce
noms sont recherchées et commentées. Si la directive ne figure pas dans le
fichier, c'est un NOP.
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
}}}
!! {{{aconf_append}}}
{{{
Dans le fichier de configuration $1, ajouter des directives correspondant
aux paramètres $2..*
Chaque argument de cette fonction correspond à une directive du fichier de
configuration et doit être de la forme name=value
Une ligne '$name $value' est ajoutée à la fin du fichier de configuration
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
}}}
!! {{{aconf_array_append}}}
!! {{{aconf_check}}}
{{{
Dans le fichier de configuration $1, tester si tous les paramètres $2..*
sont présents.
Chaque argument de cette fonction correspond à une variable du fichier de
configuration, et doit être de la forme name[=value]
Si une valeur est spécifiée, vérifier que le fichier contient la valeur
correspondante. Sinon, tester uniquement la présence de la directive.
}}}
!! {{{mconf_enable}}}
{{{
Dans le fichier de configuration $1, activer les paramètres $3..* de la
section $2
Chaque argument de cette fonction correspond à une directive du fichier de
configuration et doit être de la forme name[=value]
Toutes les directives de ce nom sont recherchées et décommentées, et la
valeur mise à jour. Si la directive ne figure pas dans le fichier, elle y
est rajoutée à la fin. A cause du mode opératoire, cette fonction ne
convient pas pour les directives dont le nom peut apparaitre plusieurs
fois dans le fichier
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
Cette fonction nécessite gawk et ignore la locale
}}}
!! {{{mconf_disable}}}
{{{
Dans le fichier de configuration $1, désactiver les paramètres $3..* de la
section $2.
Chaque argument de cette fonction correspond à une directive du fichier de
configuration et doit être de la forme name[=value]
Si la valeur est précisée, la directive correspondant à ce nom et cette
valeur est recherchée et commentée. Sinon, toutes les directives de ce
noms sont recherchées et commentées. Si la directive ne figure pas dans le
fichier, c'est un NOP.
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
Cette fonction nécessite gawk et ignore la locale
}}}
!! {{{mconf_append}}}
{{{
Dans le fichier de configuration $1, ajouter des directives correspondant
aux paramètres $3..* dans la section $2
Chaque argument de cette fonction correspond à une directive du fichier de
configuration et doit être de la forme name=value
Une ligne '$name = $value' est ajoutée à la fin de la section, qui est
créée si nécessaire à la fin du fichier de configuration
Retourner 0 si une modification a été faite dans le fichier, 1 sinon
Cette fonction nécessite gawk et ignore la locale
}}}
!! {{{mconf_array_append}}}
!! {{{mconf_check}}}
{{{
Dans le fichier de configuration $1, tester si tous les paramètres $3..*
sont présents dans la section $2
Chaque argument de cette fonction correspond à une variable du fichier de
configuration, et doit être de la forme name[=value]
Si une valeur est spécifiée, vérifier que le fichier contient la valeur
correspondante. Sinon, tester uniquement la présence de la directive.
Cette fonction nécessite gawk et ignore la locale
}}}
!! {{{gconf_addline}}}
{{{
USAGE
gconf_addline configfile -a BEGIN -z END NEWLINE
Dans le fichier de configuration $1, ajouter la ligne NEWLINE entre les lignes
BEGIN et END.
-a BEGIN
Spécifier une expression pour matcher une ligne de type BEGIN. Si
cette option n'est pas spécifiée, on considère que le début de fichier
matche la ligne BEGIN: la ligne NEWLINE est ajoutée dès que possible.
Les lignes sont matchées dans l'ordre, i.e. avec '-a 1 -a 2', il faut
d'abord trouver la ligne 1 puis la ligne 2, sinon, le test n'est pas
concluant.
-t LINE
Si après avoir matché toutes les lignes BEGIN, la ligne LINE est
rencontrée, alors considérer que la ligne à rajouter existe déjà et
qu'il ne faut pas la rajouter de nouveau
-r LINE
Si après avoir matché toutes les lignes BEGIN, la ligne LINE est
rencontrée, alors considérer que la ligne à rajouter existe et qu'il
faut la mettre à jour. Supprimer la ligne existante et la remplacer
par la nouvelle ligne.
-z END
Spécifier une expression pour matcher la ligne de type END. Que cette
option soit ou non spécifiée, on considère toujours que la fin de
fichier matche la ligne END. Ainsi, si END n'est pas trouvée, la ligne
NEWLINE est ajoutée à la fin du fichier.
Dès que la ligne END est rencontrée, et si aucun des tests -t ou -r
n'est concluant, alors ajouter la nouvelle ligne avant celle-ci
-n MAX[=1]
Ajouter au plus MAX occurences de NEWLINE. Après avoir matché END, le
cycle recommence, au plus MAX-1 fois. Utiliser MAX=-1 pour désactiver
la limite
Cette fonction nécessite gawk et ignore la locale
Retourner 0 si l'ajout s'est fait correctement. Retourner 1 si BEGIN n'a
pas été trouvé, et donc aucun ajout n'a été effectué. Retourner 2 si une
erreur quelconque s'est produite
}}}
!! {{{writelines_maybe}}}
!! {{{add_to_crontab}}}
!! {{{remove_from_crontab}}}
!! {{{disable_in_crontab}}}
!! {{{enable_in_crontab}}}
!! {{{ctnow}}}
{{{
date +"%-M %-H %-d %-m %u"
}}}
!! {{{ctresolve}}}
!! {{{get_default_crontabdir_prefix}}}
!! {{{compute_crontab_prefixes}}}
!! {{{recompute_crontab_prefixes}}}
!! {{{get_CRONTABDIR_prefix}}}
!! {{{pkg_check}}}
{{{
Vérifier que les packages sont installés sur le système
}}}
!! {{{pkg_update}}}
{{{
Mettre à jour la liste des packages silencieusement sans confirmation
}}}
!! {{{pkg_upgrade}}}
{{{
Mettre à jour la liste des packages silencieusement sans confirmation
}}}
!! {{{pkg_install}}}
{{{
Installer les packages silencieusement et sans confirmation
}}}
!! {{{pkg_installm}}}
{{{
Installer les packages silencieusement et sans confirmation
Retourner 0 si au moins un des packages a été installé. Sinon, les
packages n'ont pas été installés, soit parce qu'ils sont déjà installé,
soit parce qu'il y a eu une erreur.
}}}
!! {{{pkg_check_install}}}
{{{
Si le programme $1 n'existe pas, alors installer les packages $2..$@
S'il n'y a pas d'arguments $2..$@ utiliser $1 comme nom de package
Retourner 0 si au moins un des packages a été installé
}}}
!! {{{service_disable}}}
{{{
Désactiver le service $1 pour qu'il ne se lance pas automatiquement au
démarrage
}}}
!! {{{service_enable}}}
{{{
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
interfaces du tableau $2(=ifaces) est faite dans le fichier
$3(=/etc/network/interfaces)
}}}
!! {{{network_interfaces_check_confip}}}
{{{
Vérifier que la configuration de l'interface $1, avec la passerelle $2,
avec les adresses IP du tabbleau $3(=ipsuffixes) est faite dans le fichier
$4(=/etc/network/interfaces)
}}}
!! {{{network_interfaces_remove_iface}}}
{{{
Supprimer dans le fichier $2(=/etc/network/interfaces) toute la
configuration qui concerne l'interface $1
}}}
!! {{{network_interfaces_remove_ifaces}}}
{{{
Supprimer dans le fichier $2(=/etc/network/interfaces) toute la
configuration qui concerne les interfaces du tableau $1=(ifaces)
}}}
!! {{{network_interfaces_remove_confbr}}}
{{{
Supprimer dans le fichier $3(=/etc/network/interfaces) toute la
configuration qui concerne le bridge $1, et dont les interfaces sont
listées dans le tableau $2(=ifaces)
}}}
!! {{{network_interfaces_add_confip}}}
{{{
ajouter dans le fichier $4(=/etc/network/interfaces) la configuration pour
l'interface $1, avec éventuellement la passerelle $2, et les adresses ips
telles qu'elles sont définies dans le table $3(=ipsuffixes)
}}}
!! {{{network_interfaces_add_confbr}}}
{{{
ajouter dans le fichier $4(=/etc/network/interfaces) la configuration pour
le bridge $1, avec la liste des interfaces dans le tableau $2(=ifaces) et
la liste des configurations des adresses des interfaces dans le tableau
$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.
$1 (host) est le nom d'hôte.
$2 (confips) est le nom d'un tableau contenant la configuration des
adresses ips pour les interfaces.
$3 (confbrs) est le nom d'un tableau contenant la configuration des
bridges à créer/mettre à jour.
$4 (mainiface) est le nom de l'interface principale, c'est à dire
l'interface qui est sélectionnée si une adresse ip n'est pas préfixée de
son interface. En principe, l'interface principale est le premier bridge
défini ou la première interface définie.
$5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le
fichier /etc/network/interfaces, mais de le recréer depuis zéro.
$6 (oldhost) est le nom d'hôte actuel, avant la modification
Si un des arguments n'est pas spécifié, il est ignoré.
Le tableau confips doit contenir des définitions d'une des formes
suivantes:
[[iface][//gateway]:]address[/suffix],...
[iface:]dhcp
La deuxième forme est pour spécifier qu'une interface est configurée par
DHCP. iface vaut par défaut eth0, sauf si une définition de bridge
existe, auquel cas il s'agit du premier bridge défini. Pour chaque
interface, seule la première spécification d'adresse IP tient compte de
l'argument gateway. Les autres spécifications définissent des adresses IP
supplémentaires pour l'interface.
Le tableau brs doit contenir des définitions de la forme suivante:
br:ifaces,...
br est le nom du bridge, e.g. br0. ifaces est une liste d'interfaces
séparées par une virgule. e.g. br0:eth0,eth1
Bien que ce soit techniquement possible, ce script interdit que l'on
définisse une adresse IP pour une interface faisant partie d'un bridge.
}}}
!! {{{ensure_exists}}}
{{{
Créer le fichier vide "$1" s'il n'existe pas déjà, avec les permissions
$2(=644). retourner vrai si le fichier a été créé sans erreur
}}}
!! {{{copy_replace}}}
{{{
Copier de façon inconditionnelle le fichier $1 vers le fichier $2, en
réinitialisation les permissions à la valeur $3
}}}
!! {{{copy_new}}}
{{{
Copier le fichier "$1" vers le fichier "$2", avec les permissions $3(=644)
Ne pas écraser le fichier destination s'il existe déjà
Retourner vrai si le fichier a été copié sans erreur
}}}
!! {{{copy_update}}}
{{{
Copier le fichier "$1" vers le fichier "$2", si $2 n'existe pas, ou si $1
a été modifié par rapport à $2. Réinitialiser le cas échéant les
permissions à la valeur $3
Retourner vrai si le fichier a été copié sans erreur.
}}}
!! {{{copy_update_ask}}}
{{{
Copier ou mettre à jour le fichier $1 vers le fichier $2.
Si le fichier existe déjà, la différence est affichée, et une confirmation
est demandée pour l'écrasement du fichier.
Retourner vrai si le fichier a été copié sans erreur.
}}}
!! {{{copy_tree}}}
{{{
Copier de façon inconditionnelle l'arborescence $1 dans l'arborescence $2
}}}
!! {{{link_new}}}
{{{
Si $2 n'existe pas, créer le lien symbolique $2 pointant vers $1
}}}
!! {{{get_random_kvm_macaddr}}}
{{{
Obtenir une adresse mac au hasard commençant par 52:54:00 pour KVM
}}}
!! {{{ipcalc_splitipmask}}}
{{{
Découper $1 de la forme ip[/mask] entre l'adresse ip, qui est placé dans
la variable $2(=ip) et le masque, qui est placée dans la variable
$3(=mask)
}}}
!! {{{ipcalc_checkip}}}
{{{
Vérifier l'adresse ip $1 pour voir si elle est valide. Si l'adresse est
valide, l'afficher. Sinon, retourner 1
}}}
!! {{{ipcalc_checkmask}}}
{{{
vérifier le masque de sous-réseau $1 pour voir si elle est valide. Si oui,
afficher le suffixe (0, 8, 16, 24, 32) associé. Sinon retourner 1
}}}
!! {{{ipcalc_netmask}}}
{{{
à partir d'un suffixe (0, 8, 16, 24, 32) ou d'un masque de sous-réseau,
afficher le masque de sous-réseau. si le suffixe ou le masque ne sont pas
reconnus, retourner 1
}}}
!! {{{ipcalc_broadcast}}}
{{{
Calculer l'adresse de broadcast correspondant à l'adresse ip $1. Le masque
de sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou
/x.x.x.x ou donné dans l'argument $2. Seuls les suffixes 0, 8, 16, 24, 32
sont supportés.
Retourner 1 si un erreur s'est produite, par exemple si l'adresse ou le
suffixe sont invalides ou non supportés.
}}}
!! {{{ipcalc_gateway}}}
{{{
Calculer l'adresse du gateway correspondant à l'adresse ip $1, en
considérant que le gateway est la première adresse du réseau. Le masque de
sous-réseau peut-être indiqué dans l'adresse ip avec le suffixe /n ou
/x.x.x.x ou donné dans l'argument $2. Seuls les suffixes 0, 8, 16, 24, 32
sont supportés.
Retourner 1 si un erreur s'est produite, par exemple si l'adresse ou le
suffixe sont invalides ou non supportés.
}}}
!! {{{ipcalc_match}}}
{{{
Vérifier si l'adresse $1 correspond au modèle $2, e.g.:
ipcalc_match 10.75.0.23 10/8 --> TRUE
ipcalc_match 10.75.0.23 10.75.0.0/24 --> TRUE
ipcalc_match 10.75.0.23 10.75.0.28 --> FALSE
}}}
!! {{{ipcalc_fqdn}}}
{{{
Calculer si possible le nom pleinement qualifié correspondant à l'hôte $1.
Dans tous les cas, afficher l'hôte, mais retourner 1 si la calcul n'a pas
pu être effectué.
}}}
!! {{{ipcalc_fqdn_maybe}}}
{{{
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.
}}}
!! {{{select_java}}}
{{{
sélectionner la version *minimum* de java correspondant à $1
$1== 1.3|1.3+|1.4|1.4+|1.5|1.5+|1.6|1.6+|1.7|1.7+|1.8|1.8+
Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la
version 32bits ou 64 bits
}}}
!! {{{select_java_exact}}}
{{{
sélectionner la version *exacte* de java correspondant à $1
$1== 1.3|1.4|1.5|1.6|1.7|1.8 pour une correspondance exacte
$1== 1.3+|1.4+|1.5+|1.6+|1.7+|1.8+ pour une version minimum
Si $2 est défini, il peut s'agit de 32 ou 64 selon que l'on requière la
version 32bits ou 64 bits
}}}
!! {{{select_java_any}}}
{{{
Sélectionner la version exacte de java correspondant aux arguments, dans
l'ordre, jusqu'à ce qu'un argument corresponde. DEFAULT correspond à la
valeur actuelle de JAVA_HOME, si elle est définie.
Si aucun argument n'est défini, on assume "DEFAULT 5 6 7 8 1.4"
}}}
!! {{{get_java_version}}}
{{{
Afficher la version de java qui installée dans $1(=$JAVA_HOME)
En cas d'erreur, ne rien afficher.
}}}
!! {{{get_default_javahome_prefix}}}
!! {{{get_javaextensions_prefix}}}
!! {{{compute_java_prefixes}}}
!! {{{recompute_java_prefixes}}}
!! {{{get_JAVA_HOME_prefix}}}
!! {{{get_JAVAEXTENSIONS_prefix}}}
!! {{{read_property}}}
{{{
Lire la propriété $2 dans le fichier $1, et placer la valeur dans la
variable $3. Si la propriété n'existe pas, prendre la valeur par défaut
$4. Si $3=="", elle est construite à partir de $2 en remplaçant les '.'
par '_'
Retourner 1 si une erreur s'est produite (par exemple si le fichier
n'existe pas ou n'est pas accessible en lecture)
}}}
!! {{{write_property}}}
{{{
Ecrire la propriété $2 dans le fichier $1 avec la valeur $3.
Retourner 1 si une erreur s'est produite (par exemple si le fichier
n'existe pas ou n'est pas accessible en écriture)
}}}
!! {{{write_properties}}}
{{{
Ecrire les propriétés $2..* dans le fichier $1. Les propriétés sont de la
forme "name=value"
}}}
!! {{{norm_properties}}}
{{{
Normaliser un fichier de propriété: Les commentaires sont supprimés, les
valeurs sont triées par ordre alphabétique, les caractères accentués sont
remplacés par des caractères unicode \\uxxxx, les séquences unicodes sont
transformées en minuscule.
}}}
!! {{{json_filter}}}
{{{
traiter un flux json pour que chaque valeur soit sur une ligne séparée,
facilitant le traitement par un script bash
}}}
!! {{{awkjson}}}
!! {{{get_default_ldapconfdir_prefix}}}
{{{
Calculer et afficher la valeur par défaut de LDAPCONFDIR, ou une chaine
vide si l'on n'a pas pu le détecter automatiquement.
}}}
!! {{{get_default_ldapowner_prefix}}}
{{{
Calculer et afficher la valeur par défaut de LDAPOWNER, ou une chaine
vide si l'on n'a pas pu le détecter automatiquement.
}}}
!! {{{compute_ldap_prefixes}}}
!! {{{recompute_ldap_prefixes}}}
!! {{{get_LDAPCONFDIR_prefix}}}
!! {{{get_LDAPOWNER_prefix}}}
!! {{{split_ldapuri}}}
{{{
spliter le ldapuri $1 en $2(=proto), $3(=host) et $4(=port)
}}}
!! {{{get_suffixes}}}
{{{
obtenir les suffixes de connexion du serveur avec l'uri $1, un par ligne
retourner 1 si la valeur n'a pas pu être obtenue
}}}
!! {{{get_anysuffix}}}
{{{
obtenir le *premier* suffixe du serveur avec l'uri $1
retourner 1 si la valeur n'a pas pu être obtenue
}}}
!! {{{get_dcsuffix}}}
{{{
obtenir le *premier* suffixe du serveur avec l'uri $1 qui se termine par
dc=TLD où TLD est une valeur quelconque. A priori, c'est un suffixe d'une
base de donnée non administrative.
retourner 1 si la valeur n'a pas pu être obtenue
}}}
!! {{{get_suffix}}}
{{{
obtenir le *premier* suffixe du serveur avec l'uri $1 qui se termine si
possible par dc=TLD où TLD est une valeur quelconque. Dans le cas normal,
le suffixe affiché est celui d'une base non administrative.
retourner 1 si la valeur n'a pas pu être obtenue
}}}
!! {{{reldn}}}
!! {{{absdn}}}
{{{
obtenir le dn absolu correspondant au dn $1, le dn de base étant
$2(=$SUFFIX)
}}}
!! {{{subof}}}
{{{
tester si le dn absolu $1 est $2 ou un enfant de $2
}}}
!! {{{rabsdn}}}
{{{
comme absdn, mais tient compte de la valeur de $3(=$SEARCHBASE)
Si le dn commence par "~/", le dn est relatif à $2(=$SUFFIX)
Si le dn commence par "/", le dn est absolu
Sinon, le dn est relatif à $3
}}}
!! {{{pdn}}}
{{{
corriger pour *affichage* un dn *absolu*. pour la racine "", afficher
'/'. pour $2(=$SUFFIX), afficher '~'. sinon, afficher le dn relativement à
$2
}}}
!! {{{filter_slapdconf}}}
{{{
Traiter un fichier de configuration slapd.conf en fusionnant les lignes
qui sont découpées. Ceci permet de faire des traitements sur le contenu.
Ce filtre s'utilisera normalement avec filter_conf, e.g.:
<slapd.conf filter_slapdconf | filter_conf >result.conf
}}}
!! {{{def_match_attr}}}
!! {{{def_match_value}}}
!! {{{uncut_lines}}}
{{{
reformer les lignes qui sont coupées
}}}
!! {{{cut_lines}}}
{{{
couper les lignes trop longues
}}}
!! {{{ensure_complete_objects}}}
{{{
S'assurer que le ldif ne contient que des objets complets (éliminant ainsi
les groupes ayant seulement dn:)
}}}
!! {{{delete_marked_objects}}}
{{{
Supprimer les objets marqués avec --DELETE--:
}}}
!! {{{dump_ldif}}}
!! {{{tl_addattr}}}
!! {{{tl_modifyattr}}}
!! {{{tl_deleteattr}}}
!! {{{tl_deleteentry}}}
!! {{{tl_touchentry}}}
!! {{{tl_keepattr}}}
!! {{{tl_keepval}}}
!! {{{tl_excludeattr}}}
!! {{{tl_excludeval}}}
!! {{{tl_keepvalentry}}}
!! {{{tl_excludevalentry}}}
!! {{{tl_replval}}}
!! {{{tl_addval}}}
!! {{{tl_defval}}}
!! {{{print_values}}}
!! {{{tl_ensureval}}}
!! {{{print_ensure_values}}}
!! {{{tl_decode}}}
!! {{{tl_encode}}}
!! {{{tl_format}}}
!! {{{dump_headers}}}
!! {{{tl_formatcsv}}}
!! {{{tl_parsecsv}}}
!! {{{tl_parsecsvmod}}}
!! {{{get_transform_cmd}}}
{{{
Créer une liste de commandes bash à évaluer en fonction des arguments: une
suite de commandes séparées par //
Les variables suivantes peuvent être définies en entrée:
_T_inputfile:
Si cette variable est non vide, lire à partir du fichier $_T_inputfile
au lieu de stdin
_T_uncut_before:
faut-il fusionner automatiquement les lignes *avant* de lancer les
commandes.
_T_cut_after:
faut-il découper automatiquement les lignes *après* avoir lancé les
commandes.
}}}
!! {{{transform}}}
!! {{{file_get_vars}}}
{{{
lire les variables dans un fichier
}}}
!! {{{file_set_vars}}}
{{{
écrire les variables dans un fichier. Le fichier *doit exister*
}}}
!! {{{write_all_remaining_vars}}}
!! {{{file_get_properties}}}
{{{
lire les propriétés d'un fichier de propriété java ou xml
}}}
!! {{{file_set_properties}}}
{{{
écrire les propriétés d'un fichier de propriété java ou xml
}}}
!! {{{file_get_java_properties}}}
{{{
lire les propriétés d'un fichier de propriétés java. note: les noms de
propriété java peuvent contenir le caractère "." mais pas les noms de
variable bash. La conversion est faite automatiquement. Par exemple::
file_get_properties build.properties path.to.package "default value"
charge la valeur de la propriété dans la variable path_to_package
}}}
!! {{{file_set_java_properties}}}
{{{
écrire des propriétés dans un fichier de propriétés java.
}}}
!! {{{write_all_remaining_vars}}}
!! {{{file_get_xml_properties}}}
{{{
lire les propriétés d'un fichier de propriétés xml. Limitation: les
propriétés ne doivent pas être continuées sur plusieurs lignes. Les
propriétés doivent être écrites sous la forme::
<propname>propvalue</propname>
}}}
!! {{{file_set_xml_properties}}}
{{{
écrire des propriétés dans un fichier de propriétés java.
}}}
!! {{{write_all_remaining_vars}}}
!! {{{local_shellfix}}}
{{{
Modifier le compte local $1 pour qu'il utilise bash au lieu de sh
}}}
!! {{{local_usercheck}}}
{{{
Vérifier si le user local $1 existe
}}}
!! {{{local_useradd}}}
{{{
Créer le user local $1
USAGE: local_useradd username [gecos [passwd]]
OPTIONS
-s Créer l'utilisateur avec les droits d'administrateur
-m Créer le home directory
}}}
!! {{{printml}}}
!! {{{addml}}}
!! {{{SERVICE_OVERRIDE_network_manager_stopx}}}
{{{
désactiver network-manager avant de l'arrêter, ce qui permet de s'assurer
que chaque chaque connexion est arrêtée proprement
}}}
!! {{{SERVICE_OVERRIDE_network_manager_startx}}}
{{{
cette fonction est le pendant de stopx: penser à relancer network-manager
après avoir démarré le service
}}}
!! {{{random_index}}}
{{{
Afficher un index au hasard dans le tableau $1
}}}
!! {{{random_value}}}
{{{
Afficher une valeur au hasard dans le tableau $1
}}}
!! {{{random_char}}}
{{{
Afficher un caractère au hasard dans la chaine $1
}}}
!! {{{genpass}}}
{{{
Générer un mot de passe au hasard avec les paramètres GENPASS_*
}}}
!! {{{pkg_check}}}
{{{
Vérifier que les packages sont installés sur le système
Retourner 123 si le système n'est pas supporté, et donc qu'aucune commande
d'installation de package n'est disponible.
}}}
!! {{{pkg_install}}}
{{{
Installer les packages sans confirmation
Retourner 123 si le système n'est pas supporté, et donc qu'aucune commande
d'installation de package n'est disponible.
}}}
!! {{{get_USER_prefix}}}
!! {{{get_HOME_prefix}}}
!! {{{has_prefix}}}
!! {{{expand_prefix}}}
!! {{{list_prefixes}}}
!! {{{dump_prefixes}}}
!! {{{get_color}}}
!! {{{set_verbosity}}}
!! {{{set_interaction}}}
!! {{{show_error}}}
!! {{{show_warn}}}
!! {{{show_info}}}
!! {{{show_verbose}}}
!! {{{show_debug}}}
!! {{{check_verbosity}}}
!! {{{get_verbosity_option}}}
!! {{{check_interaction}}}
!! {{{is_interaction}}}
!! {{{get_interaction_option}}}
!! {{{is_any_branch}}}
!! {{{is_master_branch}}}
!! {{{is_develop_branch}}}
!! {{{is_release_branch}}}
!! {{{is_hotfix_branch}}}
!! {{{is_feature_branch}}}
!! {{{list_release_branches}}}
!! {{{list_hotfix_branches}}}
!! {{{list_feature_branches}}}
!! {{{pver}}}
!! {{{pkg_check}}}
{{{
Vérifier que les packages sont installés sur le système
}}}
!! {{{pkg_update}}}
{{{
Mettre à jour la liste des packages silencieusement sans confirmation
}}}
!! {{{pkg_upgrade}}}
{{{
Mettre à jour la liste des packages silencieusement sans confirmation
}}}
!! {{{pkg_install}}}
{{{
Installer les packages silencieusement et sans confirmation
}}}
!! {{{pkg_installm}}}
{{{
Installer les packages silencieusement et sans confirmation
Retourner 0 si au moins un des packages a été installé. Sinon, les
packages n'ont pas été instllés, soit parce qu'ils sont déjà installé,
soit parce qu'il y a eu une erreur.
}}}
!! {{{service_disable}}}
{{{
Désactiver le service $1 pour qu'il ne se lance pas automatiquement au
démarrage
}}}
!! {{{service_enable}}}
{{{
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
}}}
!! {{{runs_initdir}}}
{{{
Initialiser le répertoire d'hôte. $1 est un nom d'hôte pleinement
qualifié, et les fichiers sont créés dans le premier répertoire de
RUNSHOSTSDIRS qui convient: si un fichier .udir existe avec un tableau
runs_domains qui contient le domaine de l'hôte spécifié, alors c'est ce
répertoire qui est sélectionné. Sinon, on prend le premier répertoire de
RUNSHOSTSDIRS.
$2 spécifie si le fichier doit être créé avec de l'aide (yes) ou avec le
script minimum (no)
$3 est le contenu à placer dans le fichier sysinfos.conf, s'il n'a pas
déjà été provisionné.
Il faut lancer __runs_setpath avant d'utiliser cette fonction et
RUNSHOSTDIRS ne doit pas être vide
}}}
!! {{{runs_create_rscript}}}
{{{
Créer un modèle de script. Si $2 est spécifié, c'est un nom d'hôte
pleinement qualifié. Le répertoire d'hôte correspondant *doit* exister.
$3 spécifie si le fichier doit être créé avec de l'aide (yes) ou avec le
script minimum (no)
Si $2!="", il faut lancer __runs_setpath avant d'utiliser cette fonction
et RUNSHOSTDIRS ne doit pas être vide
Le chemin du nouveau script est ajouté au tableau new_rscripts
}}}
!! {{{runs_unsupported_system}}}
{{{
Afficher un message d'erreur indiquant que le système actuel n'est pas
supporté, et quitter le script
}}}
!! {{{runs_require_sysinfos}}}
{{{
Vérifier le système actuel avec check_sysinfos(), et afficher un message
d'erreur avec runs_unsupported_system() s'il ne correspond pas à la
requête
}}}
!! {{{runs_find_host}}}
!! {{{runs_add_domain}}}
{{{
Si $1 est nom d'hôte pleinement qualifié, retourner cette valeur
Sinon, lui rajouter le domaine RUNSDOMAIN
}}}
!! {{{runs_find_hostfile}}}
{{{
Trouver et afficher le fichier d'hôte $1 dans les répertoires du tableau
$3(=RUNSHOSTSDIRS), pour l'hôte $2(=$RUNSHOST). Retourner 0 en cas de
succès, 1 en cas d'échec.
Si host=$2 est une valeur non vide, la recherche est effectuée dans
{$RUNSHOSTSDIRS}/$host et {$RUNSHOSTSDIRS}/$domain/$hostname. Sinon,
retourner 1, car il faut spécifier un nom d'hôte.
}}}
!! {{{runs_find_datafile}}}
{{{
Trouver et afficher le fichier de données $1 dans le répertoire $3 s'il
est non vide puis dans les répertoires des tableaux $4(=RUNSSCRIPTSDIRS),
$5(=RUNSMODULESDIRS) et $6(=RUNSHOSTSDIRS), pour l'hôte
$2(=$RUNSHOST). Retourner 0 en cas de succès, 1 en cas d'échec.
- D'abord, si $1 *n'est pas* de la forme "./path" ou "../path", chercher
dans $3.
- Puis si l'hôte est spécifié, chercher dans {$RUNSHOSTSDIRS}/$host et
{$RUNSHOSTSDIRS}/$domain/$hostname.
- Puis chercher dans {$RUNSSCRIPTSDIRS} puis {$RUNSMODULESDIRS}.
- Puis, si $1 est de la forme "./path" ou "../path", chercher dans $3.
- Sinon, retourner 1
}}}
!! {{{runs_initvars}}}
{{{
Initialiser les variables RUNSDIR, RUNSSCRIPT, RUNSDIRPATH,
RUNSSCRIPTPATH, RUNSSCRIPTDIR et RUNSSCRIPTNAME pour le script $1.
Les valeurs sont initialisées comme suit:
RUNSSCRIPT="$(abspath "$1")"
RUNSDIR="$2" (le répertoire de $RUNS*PATH dans lequel a été trouvé le
script)
Si $3!="", RUNSDIRPATH="$3" et RUNSSCRIPTPATH="$4"
Sinon, RUNSDIRPATH="$RUNSSCRIPTDIR" et RUNSSCRIPTPATH="$RUNSSCRIPTNAME"
}}}
!! {{{runs_find_scriptfile}}}
{{{
Trouver sans l'afficher le script $1 dans les répertoires des tableaux
$3(=RUNSSCRIPTSDIRS), $4(=RUNSMODULESDIRS) et $5(=RUNSHOSTSDIRS), en
considérant que le script sera lancé sur l'hôte $2(=$RUNSHOST), et
initialiser les variables RUNSDIR, RUNSSCRIPT, RUNSSCRIPTDIR,
RUNSSCRIPTNAME, RUNSDIRPATH et RUNSSCRIPTPATH. Retourner 0 en cas de
succès, 1 en cas d'échec.
$6 vaut ".rs" par défaut est c'est une extension à rajouter au nom
spécifié si le fichier sans l'extension n'existe pas
RUNSDIR est le répertoire dans lequel a été trouvé le script (parmi les
valeurs fournies dans les tableaux RUNSSCRIPTSDIRS, RUNSMODULESDIRS,
RUNSHOSTSDIRS), RUNSDIRPATH est le répertoire à partir duquel est exprimé
le chemin du script (i.e RUNSDIRPATH + RUNSSCRIPTPATH == RUNSSCRIPT),
RUNSSCRIPT contient le chemin absolu vers le script, RUNSSCRIPTPATH
contient le chemin du script dans RUNSDIRPATH, RUNSSCRIPTDIR le répertoire
du script, et RUNSSCRIPTNAME le nom du script.
D'abord, si l'hôte est spécifié, chercher dans {$RUNSHOSTSDIRS}/$host et
{$RUNSHOSTSDIRS}/$domain/$hostname. Puis chercher dans {$RUNSSCRIPTSDIRS}
}}}
!! {{{runs_find_scriptfile_reverse}}}
{{{
Soit le fichier de script $1, exprimée de façon absolue, trouver le
fichier parmi les tableaux $3(=RUNSSCRIPTSDIRS), $4(=RUNSMODULESDIRS)
et $5(=RUNSHOSTSDIRS), en considérant que le script sera lancé sur l'hôte
$2(=$RUNSHOST), puis initialiser les variables RUNSDIR, RUNSSCRIPT,
RUNSSCRIPTDIR, RUNSSCRIPTNAME, RUNSDIRPATH et RUNSSCRIPTPATH. Retourner 0
en cas de succès, 1 en cas d'échec.
}}}
!! {{{runs_rscript}}}
{{{
Lancer le fichier $1 comme un script avec les arguments $2..$*. Retourner
la valeur de retour du script.
}}}
!! {{{runs_recipe}}}
{{{
Lancer les scripts de la recette contenue dans le fichier $1. Arrêter au
premier script qui est en erreur
}}}
!! {{{runs_rscriptpath}}}
{{{
Lancer le script $1 avec les arguments $2..$*. Le script est cherché dans
les répertoires de RUNSSCRIPTSPATH. Retourner 123 si le script n'est pas
trouvé, sinon retourner la valeur de retour du script.
}}}
!! {{{runs_recipepath}}}
{{{
Lancer la recette $1. Le fichier de recette est cherché dans les
répertoires de RUNSSCRIPTSPATH. Retourner 123 si le fichier de recette n'a
pas été trouvé, sinon retourner la valeur de retour de runs_recipe()
}}}
!! {{{runs_init}}}
!! {{{runs_initdomains}}}
{{{
Si ce n'est pas déjà le cas, initialiser RUNSDOMAINS en fonction de
/etc/resolv.conf
}}}
!! {{{runs_inithost}}}
!! {{{runs_initsysinfos}}}
!! {{{runs_initworkdir}}}
!! {{{runs_after_export}}}
{{{
après l'export, initialiser varsfile avec les valeurs qu'il faut garder
entre le déploiement local et le déploiement distant.
}}}
!! {{{runs_check_runsscript}}}
!! {{{runs_var}}}
{{{
Initialiser les variables selon les directives données en ligne de
commande.
Les arguments peuvent être une suite de définitions de la forme
'scalar=value', 'scalar!=name', 'array+=value', 'array-=value' ou
'array@=name'.
Sinon, le *dernier* argument peut-être de l'une des formes suivantes:
'array value0 [value1...]' pour initialiser un tableau,
'array+ value0 [value1...]' pour ajouter des valeurs à un tableau,
'array- value0 [value1...]' pour enlever des valeurs à un tableau.
Les formes 'scalar!=value' et 'array@=value' sont des indirections et
permettent d'initialiser la variable avec la valeur d'une autre
variable. L'avantage est que la résolution de la valeur est faite
uniquement lors de l'appel de cette fonction, ce qui est utile avec des
fonction comme 'after -r'
}}}
!! {{{runs_conf}}}
{{{
Activer les flags $*
}}}
!! {{{runs_indref}}}
{{{
fonction de convenance pour créer des références $3..* avec le fichier de
configuration $1 et les variables $2
}}}
!! {{{runs_refcerts}}}
{{{
fonction de convenance pour créer une référence à un répertoire contenant
des certificats mentionnés dans le fichier de configuration $1. Si les
références $2..* ne sont pas mentionnées, la variable certsdir dans le
fichier de configuration est utilisée.
}}}
!! {{{runs_refapacheconfig}}}
{{{
fonction de convenance pour créer les références à un répertoire de
configuration pour apache.
USAGE: refapacheconfig autoconfdir=path/to/autoconfdir [certsdir=[path/to/certsdir]]
- autoconfdir= est requis et permet de définir à la fois la variable qui
contiendra la référence ainsi que le répertoire à référencer.
- certsdir= est optionel. Si cet argument est spécifié sous la forme
certsdir=path/to/certsdir, il permet de définir à la fois la variable qui
contiendra la référence ainsi que le répertoire à référencer. Si
l'argument est spécifié sous la forme certsdir=, il permet de définir la
variable qui contiendra la référence. C'est cette variable qui sera lue
dans les fichiers de configuration. Si l'argument n'est pas spécifié, on
considère que l'argument 'certsdir=' a été utilisé.
}}}
!! {{{runs_set_lang}}}
{{{
Charger la valeur de LANG depuis l'environnement. La variable LANG est
initialisée
}}}
!! {{{runs_set_proxy}}}
{{{
Charger la valeur du proxy depuis l'environnement. Les variables
http_proxy, ftp_proxy et no_proxy sont initialisées
}}}
!! {{{runs_check_confs}}}
{{{
Vérifier l'état courant par rapport aux flags
}}}
!! {{{runs_after}}}
{{{
Vérifier que ce script est lancé après le scriptpath $1, par rapport à
RUNSSTORY
}}}
!! {{{runs_clvars}}}
{{{
Traiter les spécifications de variables données en ligne de commande ou
dans un fichier de recettes
}}}
!! {{{runs_indvars}}}
{{{
Résoudre les valeurs effectives des variables qui sont des indirections
}}}
!! {{{runs_clvars_cmd}}}
{{{
écrire la ligne de recette correspondant au script $1 et aux variables
$2..$*
}}}
!! {{{runs_loadconfs}}}
!! {{{runs_clearvars}}}
!! {{{runs_action_desc}}}
!! {{{runs_action_dump}}}
!! {{{runs_action_run}}}
!! {{{runs_action_export}}}
!! {{{shouldrun}}}
!! {{{checkdone}}}
!! {{{requiredone}}}
!! {{{setdone}}}
!! {{{resetdone}}}
!! {{{runsmod_checkenv}}}
{{{
vérifier l'environement. créer les répertoires nécessaires.
}}}
!! {{{runsmod_should_update_repolists}}}
{{{
tester s'il faut mettre à jour au moins un des fichiers contenant les
listes des dépôts
}}}
!! {{{runsmod_update_repolists}}}
{{{
mettre à jour si nécessaire les fichiers contenant les listes des dépôts.
Si $1 n'est pas vide, forcer la mise à jour de tous les fichiers
}}}
!! {{{runsmod_setup_vars}}}
{{{
récupérer configuration statique pour la mettre à jour
}}}
!! {{{runsmod_clone_or_pull}}}
{{{
Chercher les modules $3..@, pour l'hôte $1 qui est le mode d'hôte: none,
all, self ou one pour un hôte spécifique $2. Ajouter les chemins dans le
tableau REPO_DIRS. Mettre à jour les tableaux SCRIPTS_DIRS, MODULES_DIRS
et HOSTS_DIRS
}}}
!! {{{runsmod_teardown_vars}}}
!! {{{semver_parse}}}
!! {{{semver_incmajor}}}
!! {{{semver_incminor}}}
!! {{{semver_incpatchlevel}}}
!! {{{semver_setversion}}}
!! {{{semver_setprelease}}}
!! {{{semver_compare_prelease}}}
!! {{{semver_setmetadata}}}
!! {{{semver_addmetadata}}}
!! {{{semver_compare_metadata}}}
{{{
même algo que pour prelease
}}}
!! {{{semver_copy}}}
!! {{{semver_build}}}
!! {{{semver_setvar}}}
!! {{{psemver_parse}}}
!! {{{psemver_incmajor}}}
!! {{{psemver_incminor}}}
!! {{{psemver_incpatchlevel}}}
!! {{{psemver_setversion}}}
!! {{{psemver_setprelease}}}
!! {{{psemver_compare_prelease}}}
!! {{{psemver_setmetadata}}}
!! {{{psemver_addmetadata}}}
!! {{{psemver_compare_metadata}}}
!! {{{psemver_copy}}}
!! {{{psemver_build}}}
!! {{{psemver_setvar}}}
!! {{{service}}}
!! {{{service_start}}}
{{{
démarrer le service $1 de façon inconditionnelle
}}}
!! {{{service_startm}}}
{{{
démarrer le service $1 s'il n'est pas déjà démarré
}}}
!! {{{service_stop}}}
{{{
arrêter le service $1 de façon inconditionnelle
}}}
!! {{{service_stopm}}}
{{{
arrêter le service $1 s'il n'est pas déjà arrêté
}}}
!! {{{service_reload}}}
{{{
recharger le service $1
}}}
!! {{{service_status}}}
{{{
tester/afficher le status du service $1
}}}
!! {{{read_data}}}
!! {{{dump_data}}}
!! {{{compute_local_sysinfos}}}
!! {{{compute_remote_sysinfos}}}
!! {{{ensure_sysinfos}}}
{{{
Essayer de déterminer les valeurs des variables $1(=SYSNAME), $2(=SYSDIST)
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
}}}
!! {{{get_sysinfos_desc}}}
{{{
Afficher une chaine de la forme SYSNAME/SYSDIST/SYSVER qui décrit le
système actuel
}}}
!! {{{check_sysinfos}}}
{{{
Tester si le système courant ($MYSYSNAME, $MYSYSDIST, $MYSYSVER, $MYBITS)
correspond à au moins un des arguments.
Il est possible de spécifier des variables différentes pour tester le
système courant avec l'option --vars qui doit être spécifiée en premier:
check_sysinfos --vars sysname sysdist sysver bits -d debian
Les options -s, -d, -v, -b permettent respectivement de vérifier le
système, la distribution, la version et le nombre de bits. Il est possible
de spécifier plusieurs tests à effectuer, e.g.:
check_sysinfos -d debian ubuntu -b 64
pour tester si l'on est sur une distribution debian ou ubuntu *et* sur un
système 64 bits
Note: avec l'option --vars, il peut arriver que sysname, sysdist ou sysver
ne soient pas des tableaux mais des variables scalaires, surtout si elles
sont fournies par l'utilisateur. Il est conseillé dans ce cas de tester
toutes les possibilités quand on vérifie une valeur, e.g.:
check_sysinfos --vars sysname sysdist sysver bits -s linux64 linux32 linux
pour tester si on est sur un système linux
Avec l'option -v, il est possible de suffixer la valeur avec + ou - selon
que l'on veut toutes les versions situées après ou avant la version
spécifiée. Attention, à cause d'une limitation de l'implémentation, il
faut alors impérativement filtrer aussi sur la distribution, e.g:
check_sysinfo -d debian -v lenny+
pour tester si on est en lenny ou en squeeze.
De même, l'option -d accepte aussi de suffixer la valeur avec + ou -, mais
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+
}}}
!! {{{on_debian}}}
{{{
Tester si on est sur debian. charger le module debian si c'est le cas.
Si une commande $1..@ est spécifiée, la lancer, mais il n'est alors plus
possible de lancer des tests plus spécifiques avec __on_debian()
}}}
!! {{{on_debian:}}}
!! {{{on_stretch}}}
!! {{{on_jessie}}}
!! {{{on_wheezy}}}
!! {{{on_squeeze}}}
!! {{{on_default}}}
!! {{{template_list}}}
{{{
Soit $N le séparateur --, lister les fichiers des répertoires sources
$2..$(N-1) qui seraient fusionnés avec template_merge() ou supprimés avec
template_unmerge() du répertoire destination $1. Si des chemins sont spécifiés
avec les arguments $(N+1)..@, ne traiter que les fichiers qui correspondent à
ces spécifications. Exemple:
template_list destdir srcdirs... -- specs...
}}}
!! {{{template_merge}}}
{{{
Soit $N le séparateur --, copier dans le répertoire destination $1 les
fichiers des répertoires sources $2..$(N-1) correspondant aux spécifications
$(N+1)..@, si ces fichiers n'ont pas été modifiés dans le répertoire de
destination.
Les fichiers sources ayant l'extension .template sont ignorés par défaut, sauf
s'ils sonts demandés explicitement. Exemple:
template_merge destdir srcdirs... -- specs...
}}}
!! {{{template_unmerge}}}
{{{
Soit $N le séparateur --, supprimer du répertoire destination $1 les fichiers
provenant des répertoires sources $2..$(N-1) et qui n'ont pas été modifiés. Si
des chemins sont spécifiés avec les arguments $(N+1)..@, ne traiter que les
fichiers qui correspondent à ces spécifications. Exemple:
template_unmerge destdir srcdirs... -- specs...
}}}
!! {{{template_cleandest}}}
{{{
Supprimer dans le répertoire de destination $1 tous les répertoires vides.
Cette fonction est habituellement utilisée après template_unmerge()
Ignorer les chemins qui contiennent .git/ et .svn/
}}}
!! {{{template_diff}}}
{{{
Afficher les différences entre les fichiers du répertoire de destination $1 et
les fichiers des répertoires sources $2..@
}}}
!! {{{template_srcdir}}}
{{{
Obtenir le chemin vers le répertoire source de templates $1, situé dans
ULIBDIR/templates
}}}
!! {{{templatectl_config}}}
{{{
Obtenir le chemin vers le fichier de configuration pour le répertoire $1
Si $2==nohideconfig, utiliser le nom CONFIG.conf, sinon utiliser par défaut
.CONFIG sauf si le fichier CONFIG.conf existe
}}}
!! {{{templatectl_loadvars}}}
{{{
Charger les valeurs des variables depuis le fichier $1
Les variables suivantes doivent être définies:
- Le tableau TEMPLATECTL_DEFAULTS permet de donner une valeur par défaut aux
variables mentionnées dans TEMPLATE_STATIC_VARS. C'est une liste de valeurs
de la forme 'name=value'
- Le tableau TEMPLATECTL_VARS contient des variables supplémentaires
spécifiées par l'utilisateur. C'est une liste de valeurs de la forme
'name=value'
- TEMPLATE_STATIC_VARS doit contenir une liste de noms de variables qui
peuvent être remplacés dans les fichiers de template.
- TEMPLATE_DYNAMIC_VARS contient une liste de noms de variables valides, mais
qui ne doivent pas être remplacés, en effet, ils sont utilisés pour le
déploiement des fichiers.
- TEMPLATE_NOWRITE_VARS contient une liste de noms de variables qui ne
devraient pas être écrits dans le fichier des variables, sauf si elles
reçoivent une valeur explicite de la part de l'utilisateur. Ce tableau est
mis à jour lors de l'analyse du tableau TEMPLATECTL_VARS
}}}
!! {{{templatectl_writevars}}}
{{{
Ecrire les variables dans le fichier $1
}}}
!! {{{templatectl_list_vars}}}
{{{
Afficher les valeurs des variables
}}}
!! {{{templatectl}}}
{{{
Fonction de haut niveau qui facilite l'utilisation des fonctions template_*
définir la fonction __display_templatectl_help() pour l'affichage de l'aide
- Le tableau TEMPLATECTL_SRCDIRS doit contenir la liste des répertoires
sources pour les templates. Alternativement, il est possible de définir la
variable TEMPLATECTL_SRCDIR s'il n'y a qu'un seul répertoire source pour le
template
- TEMPLATECTL_CONFIG est le nom de base du fichier à partir duquel sont
chargées les variables et dans lequel sont écrites les variables avec
l'option --write-vars
Si le nom de base est CONFIG, le fichier s'appelera .CONFIG si l'option
--hide-config est utilisée (par défaut) ou CONFIG.conf si l'option
--no-hide-config est utilisée
Les variables de template_loadvars() sont aussi prises en compte
}}}
!! {{{twget_version}}}
{{{
lire le numéro de version dans le fichier $1
}}}
!! {{{twdump_header}}}
{{{
lire et afficher le contenu avant-storeArea du tiddlywiki $1
}}}
!! {{{twdump_footer}}}
{{{
lire et afficher le contenu après-storeArea du tiddlywiki $1
}}}
!! {{{twdump_storeArea}}}
{{{
lire et afficher le storeArea dans le tiddlywiki $1
}}}
!! {{{twreplace_storeArea}}}
{{{
dans le tiddlywiki $1, remplacer le storeArea par le fichier $2 (par défaut, lu sur stdin)
}}}
!! {{{twupgrade}}}
{{{
mettre à jour le tiddlywiki $1 sur la base du tiddlywiki plus récent $2
}}}
!! {{{twdate_curtwp}}}
{{{
obtenir la date courante dans le format "dd/mm/YYYY HH:MM" exprimée dans
l'heure locale
$1 est éventuellement la date exprimée en nombre de secondes depuis
l'epoch, exprimée dans l'heure locale
}}}
!! {{{twdate_tid2twp}}}
{{{
Transformer $1, une date de la forme "YYYYmmddHHMM" exprimée dans le
timezone UTC en une chaine "dd/mm/YYYY HH:MM" exprimée dans l'heure locale
Si $1 n'est pas dans le bon format, ne rien afficher
}}}
!! {{{twdate_curtid}}}
{{{
obtenir la date courante dans le format "YYYYmmddHHMM" exprimée dans le
timezone UTC
$1 est éventuellement la date exprimée en nombre de secondes depuis
l'epoch, exprimée dans l'heure locale
}}}
!! {{{twdate_twp2tid}}}
{{{
Transformer $1, une date de la forme "dd/mm/YYYY HH:MM" exprimée en heure
locale en une chaine "YYYYmmddHHMM" exprimée dans le timezone UTC
Si $1 n'est pas dans le bon format, ne rien afficher
}}}
!! {{{twdump_tiddlers}}}
{{{
dumper les tiddlers du fichier $1 généré avec twdump_storeArea() sous
forme d'une liste d'appel de fonction '__tiddler_data title creator
modifier created modified tags changecount content'
Les arguments de la fonction sont les valeurs brutes du tiddler, qui ont
simplement été corrigées avec unquote_html()
}}}
!! {{{dump_tiddler}}}
!! {{{twdump_twpage}}}
{{{
Dumper le contenu de la twpage $1 sous forme d'un appel à une function
'__twpage_data title creator modifier created modified tags changecount
content'
Les arguments de la fonction sont les valeurs brutes de la twpage, sauf
que le champ modified contient toujours la date de dernière modification
du fichier.
}}}
!! {{{twwrite_tiddler}}}
{{{
Ecrire sur STDOUT le tiddler correspondant aux paramètres sont spécifiés
sur la ligne de commande. Les arguments sont les valeurs brutes prises de
la twpage, telles qu'elles sont générées par twdump_twpage()
}}}
!! {{{twcheck_twpage_modified}}}
{{{
Vérifier si la twpage $1 peut être écrasée par un tiddler dont la date de
modification est $2, de format "YYYYmmddHHMM" exprimée dans le timezone
UTC
C'est le cas si le fichier $1 n'existe pas, ou a une date de modification
antérieure à $2
}}}
!! {{{twcheck_twpage_newtwpage}}}
{{{
Vérifier si la twpage $1 peut être écrasée par la twpage $2
C'est le cas si le fichier $1 n'existe pas, ou a une date de modification
antérieure à $2
}}}
!! {{{twwrite_twpage}}}
{{{
Ecrire dans le répertoire courant le fichier correspondant au tiddler dont
les paramètres sont spécifiés sur la ligne de commande. Les arguments sont
les valeurs brutes prises du tiddler, telles qu'elles sont générées par
twdump_tiddlers()
Retourner 0 si le fichier a été écrasé, 1 s'il n'a pas été écrasé parce
qu'il n'a pas été modifié, 2 s'il n'a pas été écrasé parce qu'il est plus
récent.
Si TW_VERBOSE=1, afficher un message informatif lors de l'export
}}}
!! {{{export_to_twpages}}}
{{{
Exporter tous les tiddlers du tiddlywiki $1 dans le répertoire $2
}}}
!! {{{import_from_twpages}}}
{{{
Remplacer les tiddlers du tiddlywiki $1 par les twpages du répertoire $2
}}}
!! {{{udir_check}}}
{{{
Vérifier si le fichier $1 existe
Si $1 est un répertoire, prendre $1/.udir
}}}
!! {{{udir_create_maybe}}}
{{{
Si le fichier $1 n'existe pas, le créer comme un template .udir
Si $1 est un répertoire, prendre $1/.udir
}}}
!! {{{udir_dump}}}
{{{
Dumper toutes les variables définies pour le fichier $1
Si $1 est un répertoire, prendre $1/.udir
}}}
!! {{{udir_eval}}}
{{{
Evaluer la commande "$2..$*" dans le contexte des variables définies pour
le répertoire $1. La commande est évaluée dans un sous-shell pour ne pas
polluer l'espace de noms courant.
}}}
!! {{{udir_dump_all}}}
{{{
Dumper toutes les variables définies pour le répertoire $1 et *tous ses
parents* jusqu'à la racine
}}}
!! {{{udir_eval_all}}}
{{{
Evaluer la commande "$2..$*" dans le contexte des variables définies pour
le répertoire $1 et *tous ses parents* jusqu'à la racine
}}}
!! {{{udir_parse}}}
{{{
Dans le fichier $1, lire les noms des variables
Si $1 est un répertoire, prendre $1/.udir
Les noms des variables sont placés dans le tableau $2(=UDIR_VARS), et les noms
des tableaux sont placés dans le tableau $3(=UDIR_ARRAYS)
note: les regex qui sont entre "" au lieu de // le sont à cause d'un bug
de awk sous macosx
}}}
!! {{{udir_update}}}
{{{
Dans le fichier $1, mettre à jour les variables $2..*
Si $1 est un répertoire, prendre $1/.udir
Chaque argument de cette fonction est de la forme name[=value]
Si value n'est pas précisée, la variable obtient une valeur nulle
(i.e. var=)
Si la variable ne figure pas dans le fichier, elle est rajoutée à la fin
du fichier.
Cette fonction nécessite gawk.
}}}
!! {{{write_unseen}}}
!! {{{udir_edit}}}
!! {{{uenv_update_dir}}}
{{{
Mettre à jour l'ordre de chargement pour le répertoire $1 qui contient des
fichiers de profil pour le shell. L'ordre dans lequel le fichiers de
profil doivent être chargé est écrit dans le fichier $1/.source_in_order
Si $2 est spécifié, il s'agit d'un fichier temporaire utilisé pour les
calculs de l'ordre des chargements.
$3(=$1) est le répertoire de destination. Si $1 est un répertoire de
préparation temporaire, on peut spécifier grâce à $3 quel est le
répertoire final après préparation.
S'ils sont spécifiés, les arguments $4..* sont des répertoires contenant
des fichiers de profils supplémentaires qu'il faut considérer aussi. Dans
ce cas, $3 est ignoré.
}}}
!! {{{uenv_set_destdirs}}}
!! {{{uenv_sourced_in}}}
{{{
vérifier que l'un des fichiers $2..$* est sourcé dans $1
}}}
!! {{{uenv_configure_profiles}}}
!! {{{uenv_install_profiles}}}
!! {{{uinst}}}
{{{
lancer uinst en déclarant les variables locales, de façon à ne pas polluer
l'environnement de l'appelant.
}}}
!! {{{uinst_nolocal}}}
{{{
Interface en mode ligne de commande pour uinst. Appeler cette fonction
avec les paramètres de la ligne de commande, e.g.:
uinst_nolocal "$@"
}}}
!! {{{eerror}}}
!! {{{die}}}
!! {{{uprovided}}}
{{{
Tester si le module $1 a déjà été chargé par urequire
}}}
!! {{{uprovide}}}
{{{
Spécifier que le module $1 a été sourcée, ou prétendre que c'est le cas.
Retourner 1 si le module était déjà pourvu, 0 si c'est la première fois
qu'on le pourvoit
}}}
!! {{{urequire}}}
{{{
Sourcer un module recherché dans ULIBDIRS
Le module DEFAULTS est traité de façon particulière: si le fichier associé
n'est pas trouvé, charger base, pretty, sysinfos et compat à la place
Si un module n'est pas trouvé, quitter le script avec die()
}}}
!! {{{ulibadd}}}
{{{
Ajouter $1 au chemin de recherche de urequire
}}}
!! {{{ulibsync}}}
{{{
Synchroniser les modules de ulib dans le répertoire $1
}}}
!! {{{ulibver}}}
{{{
Vérifier que la version actuelle de ulib est au moins à la version $1
(inclue) et éventuellement au plus à la version $2 (exclue)
}}}
!! {{{ulibver_require}}}
!! {{{eerror}}}
!! {{{die}}}
!! {{{uprovided}}}
!! {{{uprovide}}}
!! {{{urequire}}}
!! {{{ulibadd}}}
!! {{{ulibsync}}}
!! {{{ulibver}}}
!! {{{ulibver_require}}}
!! {{{vcs_getvcs_help}}}
!! {{{vcs_getvcs}}}
!! {{{vcs_getroot_help}}}
!! {{{vcs_getroot}}}
!! {{{vcs_getrepos_help}}}
!! {{{vcs_getrepos}}}
!! {{{vcs_geturl_help}}}
!! {{{vcs_geturl}}}
!! {{{vcs_vcs_help}}}
!! {{{vcs_vcs}}}
!! {{{vcs_add_help}}}
!! {{{vcs_add}}}
{{{
le répertoire de référence est le répertoire du premier fichier ajouté
}}}
!! {{{vcs_remove_help}}}
!! {{{vcs_remove}}}
{{{
le répertoire de référence est le répertoire du premier fichier supprimé
}}}
!! {{{vcs_copy_help}}}
!! {{{vcs_copy}}}
{{{
le répertoire de référence est le répertoire de destination
}}}
!! {{{vcs_move_help}}}
!! {{{vcs_move}}}
{{{
le répertoire de référence est le répertoire de destination
}}}
!! {{{vcs_mkdir_help}}}
!! {{{vcs_mkdir}}}
{{{
le répertoire de référence est le répertoire du premier répertoire créé
}}}
!! {{{vcs_commit_help}}}
!! {{{vcs_commit}}}
!! {{{vcs_status_help}}}
!! {{{vcs_status}}}
!! {{{vcs_update_help}}}
!! {{{vcs_update}}}
!! {{{vcs_push_help}}}
!! {{{vcs_push}}}
!! {{{vcs_diff_help}}}
!! {{{vcs_diff}}}
!! {{{vcs_tag_help}}}
!! {{{vcs_tag}}}
!! {{{git_getrepos}}}
!! {{{git_geturl}}}
!! {{{git_have_annex}}}
!! {{{git_add}}}
!! {{{git_remove}}}
!! {{{git_copy}}}
!! {{{git_move}}}
!! {{{git_mkdir}}}
!! {{{git_commit}}}
!! {{{git_status}}}
!! {{{git_update}}}
!! {{{git_push}}}
!! {{{git_diff}}}
!! {{{git_tag}}}
!! {{{git_check_gitvcs}}}
!! {{{git_ensure_gitvcs}}}
!! {{{git_list_branches}}}
!! {{{git_list_rbranches}}}
!! {{{git_list_pbranches}}}
{{{
lister les branches locales et celles qui existent dans l'origine
$1(=origin) et qui pourraient devenir une branche locale avec la commande
git checkout -b
}}}
!! {{{git_have_branch}}}
!! {{{git_have_rbranch}}}
!! {{{git_get_branch}}}
!! {{{git_get_branch_remote}}}
!! {{{git_get_branch_merge}}}
!! {{{git_get_branch_rbranch}}}
!! {{{git_is_branch}}}
!! {{{git_have_remote}}}
!! {{{git_track_branch}}}
!! {{{git_ensure_branch}}}
{{{
retourner 0 si la branche a été créée, 1 si elle existait déjà, 2 en cas d'erreur
}}}
!! {{{git_check_cleancheckout}}}
{{{
vérifier qu'il n'y a pas de modification locales dans le dépôt
correspondant au répertoire courant.
}}}
!! {{{git_ensure_cleancheckout}}}
!! {{{git_is_ancestor}}}
{{{
vérifier que la branche $1 est un ancêtre direct de la branche $2, qui
vaut par défaut refs/remotes/${3:-origin}/$1
note: cette fonction retourne vrai si $1 et $2 identifient le même commit
}}}
!! {{{git_should_ff}}}
{{{
vérifier si la branche $1 devrait être fast-forwardée à partir de la
branche d'origine $2, qui vaut par défaut refs/remotes/${3:-origin}/$1
note: cette fonction est similaire à git_is_ancestor(), mais retourne
false si $1 et $2 identifient le même commit
}}}
!! {{{git_should_push}}}
{{{
vérifier si la branche $1 devrait être poussée vers la branche de même nom
dans l'origine $2(=origin), parce que l'origin peut-être fast-forwardée à
partir de cette branche.
}}}
!! {{{git_fast_forward}}}
{{{
vérifier que la branche courante est bien $1, puis tester s'il faut la
fast-forwarder à partir de la branche d'origine $2, puis le faire si c'est
nécessaire. la branche d'origine $2 vaut par défaut refs/remotes/origin/$1
}}}
!! {{{git_is_merged}}}
{{{
vérifier que les branches $1 et $2 ont un ancêtre commun, et que la
branche $1 a été complètement fusionnée dans la branche destination $2
}}}
!! {{{git_annex_initial}}}
{{{
sur le dépôt $1 fraichement cloné, vérifier s'il faut faire git annex
init. Si oui, l'initialiser avec le nom d'hôte, et récupérer tous les
fichiers annexés
retourner 1 si une erreur s'est produite
}}}
!! {{{svn_getrepos}}}
!! {{{svn_geturl}}}
!! {{{svn_add}}}
!! {{{svn_remove}}}
!! {{{svn_copy}}}
!! {{{svn_move}}}
!! {{{svn_mkdir}}}
!! {{{svn_commit}}}
!! {{{svn_status}}}
!! {{{svn_update}}}
!! {{{svn_push}}}
!! {{{svn_diff}}}
!! {{{svn_tag}}}
!! {{{cvs_getrepos}}}
!! {{{cvs_geturl}}}
!! {{{cvs_add}}}
!! {{{cvs_remove}}}
!! {{{cvs_copy}}}
!! {{{cvs_move}}}
!! {{{cvs_mkdir}}}
!! {{{cvs_commit}}}
!! {{{cvs_status}}}
!! {{{cvs_update}}}
!! {{{cvs_push}}}
!! {{{cvs_diff}}}
!! {{{cvs_tag}}}
!! {{{virsh_filter}}}
{{{
filtrer une sortie liste de virsh. En pratique, ne prendre que les lignes
non vides à partir de la ligne "----*"
}}}
!! {{{virsh_list}}}
!! {{{virsh_pool_list}}}
!! {{{guess_vm_type}}}
{{{
Afficher hn, kvm, vmware, virtualbox ou openvz suivant que l'on est
*probablement* respectivement sur une machine physique, une machine
virtuelle kvm, vmware, virtualbox, openvz
XXX pour le moment, seuls openvz, kvm et hn sont supportés
}}}
!! {{{compute_webobjects_prefixes}}}
!! {{{recompute_webobjects_prefixes}}}
!! {{{get_NEXT_ROOT_prefix}}}
!! {{{get_WOROOT_prefix}}}
!! {{{get_LOCALROOT_prefix}}}
!! {{{get_SYSTEMFRAMEWORKS_prefix}}}
!! {{{get_WOEXTENSIONS_prefix}}}
!! {{{get_WOFRAMEWORKS_prefix}}}
!! {{{get_WOAPPLICATIONS_prefix}}}
!! {{{get_WOCONFIGURATION_prefix}}}
!! {{{get_WOAUTOSTART_prefix}}}
!! {{{get_WOLOGS_prefix}}}
!! {{{get_WOVERSION_prefix}}}
!! {{{is_wobundle}}}
{{{
Tester si $1 a un nom de bundle valide, c'est à dire avec l'extension .woa
ou .framework
}}}
!! {{{is_woappdir}}}
{{{
Tester si $1 est un répertoire d'application webobjects. Le test est
effectué sur le contenu du bundle, pas sur le nom (utiliser is_wobundle()
pour cela)
}}}
!! {{{is_wofwkdir}}}
{{{
Tester si $1 est un répertoire de framework webobjects. Le test est
effectué sur le contenu du bundle, pas sur le nom (utiliser is_wobundle()
pour cela)
}}}
!! {{{get_app_winclspth}}}
{{{
calculer la valeur de Contents/Windows/CLSSPATH.txt pour l'application $1
}}}
!! {{{get_infofile}}}
{{{
Obtenir le chemin vers le fichier Info.plist dans le répertoire de
resource du bundle $1
}}}
!! {{{read_infofile}}}
{{{
Lire la version et le numéro de release dans le fichier $1 (chemin vers
Info.plist) et les placer dans les variables $2(=version) et $3(=release)
Retourner 1 si un erreur s'est produite, par exemple si le fichier $1
n'existe pas ou n'est pas accessible en lecture
}}}
!! {{{write_infofile}}}
{{{
Ecrire $2 (la version) et $3 (le numéro de release) dans le fichier $1
(chemin vers Info.plist)
Retourner 1 si un erreur s'est produite, par exemple si le fichier $1
n'existe pas
}}}
!! {{{get_jawotoolsfile}}}
{{{
Obtenir le chemin vers le fichier jawotools.properties dans le bundle $1
}}}
!! {{{read_jawotoolsfile}}}
{{{
lire le fichier de propriété $1 et placer les valeurs dans les variables
$2(=version), $3(=releaseDate), $4(=description)
}}}
!! {{{save_jawotoolsfile}}}
{{{
écrire le fichier de propriété $1 avec les valeurs version ($2),
releaseDate ($3) et description ($4)
}}}
!! {{{get_versionfile}}}
{{{
Obtenir le chemin vers le fichier VERSION.txt dans le répertoire de
resource du bundle $1
}}}
!! {{{get_configfile}}}
{{{
obtenir le chemin vers le fichier de configuration du répertoire de
resource du bundle
$1=bundle ou resdir (appdir/Contents/Resources ou fwkdir/Resources)
}}}
!! {{{searchreplace_classpath}}}
{{{
Dans les fichiers classpath de l'application $1, remplacer $2 par $3. Si
$3 est vide, la ligne est supprimée
}}}
!! {{{dump_jars}}}
{{{
Afficher les jars des frameworks utilisés par l'application $1
}}}
!! {{{dump_frameworks}}}
{{{
Afficher les frameworks utilisés par l'application $1
}}}
!! {{{remove_framework}}}
{{{
supprimer le framework $2 (nom de base) des fichiers de classpath du
bundle d'application $1
}}}
!! {{{add_framework}}}
{{{
s'il n'y existe pas déjà, ajouter le framework $2 (nom de base ou chemin
absolu) aux fichiers de classpath du bundle d'application $1
}}}
!! {{{fix_jars_case}}}
{{{
Vérifier que la casse des jars de tous les frameworks utilisés par
l'application $1 est conforme au système de fichier
}}}
!! {{{verifix_bundle}}}
{{{
vérifier et corriger le bundle $1. Pour une application, on vérifie que le
script est exécutable. Pour un framework, on vérifie que le framework est
conforme au modèle des framework générés par WebObjects.
}}}
!! {{{compute_fapps}}}
{{{
Placer dans le tableau $1(=fappnames) la liste des noms de bundle
d'applications qui dépendent du framework $2
Cette opération est faite à partir des informations sur le système de
fichier. Elle ne peut donc concerner qu'une installation locale.
}}}
!! {{{woraurl}}}
{{{
Faire une requête avec la méthode $1 sur l'url $2 avec le payload $3 (par
exemple pour la méthode POST). la réponse est disponible dans le fichier
$WORAURL_DATA, $4(=http_code) contient le code de réponse.
Retourner 0 en cas de succès, ou une valeur différente de zéro si un
erreur se produit (typiquement, 3 pour une erreur du serveur, 1 pour une
réponse applicative, comme par exemple si l'application n'existe pas)
Les codes de réponse 2xx et 417 sont des succès
Les autres codes (à priori 4xx ou 5xx) sont des erreurs
note: le code 417 est utilisé par le moniteur pour répondre "Non", par
opposition à 200 utilisé pour répondre "OUI"
}}}
!! {{{wogeturl}}}
!! {{{splitins}}}
{{{
Analyser le nom $1, qui peut être de forme '', 'Name.woa',
'Name.framework', 'App' ou 'Instance-N' (où N est un nombre), et
initialiser les variables $2(=type) et $3(=name)
Si $1=="", type=all et name=""
Si $1==Name.woa, type=woa et name=Name.woa
Si $1==Name.framework, type=fwk et name=Name.framework
Si $1==App, type=app et name=App
si $1==App-N, type=ins et name=App-N
}}}
!! {{{create_wodirs_maybe}}}
!! {{{check_autostart}}}
{{{
vérifier la présence du fichier $WOAUTOSTART. Si ce n'est pas le cas, le
créer avec le contenu du tableau $1
}}}
!! {{{get_autostart_order}}}
{{{
Initialiser le tableau $1 avec la liste donnée dans le fichier
$WOAUTOSTART
}}}
!! {{{apply_autostart_order}}}
{{{
Réordonner les valeurs $3..* selon la liste donnée dans le tableau $2,
puis placer le résultat dans le tableau $1. $2 doit être construit avec
get_autostart_order(). Si $2 n'est pas spécifié, la liste est construite
localement.
Si le tableau contient des lignes de délai @N, replacer les délais après
les applications appropriées
}}}
!! {{{wotaskd_stop}}}
!! {{{wotaskd_start}}}
!! {{{javamonitor_stop}}}
!! {{{womonitor_stop}}}
!! {{{javamonitor_start}}}
!! {{{womonitor_start}}}
!! {{{woservices_stop}}}
!! {{{woservices_start}}}
!! {{{date2version}}}
!! {{{woconf}}}
!! {{{wotag}}}
!! {{{woinst}}}
!! {{{wom__statistics}}}
{{{
Afficher les statistiques pour le serveur $1, avec éventuellement le mot
de passe $2
}}}
!! {{{wom__info}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et afficher des informations sur l'application $1 (par défaut, all)
}}}
!! {{{wom__info_filter}}}
{{{
filtrer le résultat de wom__info en ne gardant que les tags
name, state, activeSessions, autoRecover, deaths, host, port
}}}
!! {{{wom_info}}}
{{{
Contacter le moniteur sur l'hôte $3, avec éventuellement le mot de passe
$4, et initialiser le tableau $1 avec une liste de valeurs quotés de la
forme:
"'name' 'state' 'activeSessions' 'autoRecover' 'deaths' 'host' 'port'"
concernant l'application $2 (par défaut, toutes les applications). Notez
qu'il y a une ligne par instance d'application
Ces valeurs peuvent être utilisées comme arguments d'une fonction. par
exemple:
wom_info appinfos "" host pw
for args in "${appinfos[@]}"; do
eval "userfunc $args"
done
}}}
!! {{{wom_getValidAndRunning}}}
{{{
Placer la liste des applications valides dans le tableau $1(=valid_apps)
et la liste des applications qui tournent dans le tableau
$2=(running_apps), en contactant le moniteur sur l'hôte $3, avec
éventuellement le mot de passe $4.
}}}
!! {{{show_appinfo}}}
{{{
Afficher des informations sur une application. Les arguments doivent être
le résultat de la fonction wom_info()
}}}
!! {{{wom_running}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et tester si l'application $1 (par défaut, all) tourne actuellement
}}}
!! {{{wom_start}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et démarrer l'application $1 (par défaut, all)
}}}
!! {{{wom_stopped}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et tester si l'application $1 (par défaut, all) est actuellement arrêtée
}}}
!! {{{wom_stop}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et arrêter l'application $1 (par défaut, all)
}}}
!! {{{wom_forceQuit}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et forcer l'arrêt de l'application $1 (par défaut, all)
}}}
!! {{{wom_turnScheduledOn}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et activer le flag scheduled sur l'application $1 (par défaut, all)
}}}
!! {{{wom_turnScheduledOff}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et désactiver le flag scheduled sur l'application $1 (par défaut, all)
}}}
!! {{{wom_turnRefuseNewSessionOn}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et activer le flag refuseNewSession sur l'application $1 (par défaut,
all)
}}}
!! {{{wom_turnRefuseNewSessionOff}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et désactiver le flag refuseNewSession sur l'application $1 (par
défaut, all)
}}}
!! {{{wom_turnAutoRecoverOn}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et activer le flag autoRecover sur l'application $1 (par défaut, all)
}}}
!! {{{wom_turnAutoRecoverOff}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et désactiver le flag autoRecover sur l'application $1 (par défaut,
all)
}}}
!! {{{wom_bounce}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et redémarrer l'application $1 (par défaut, all) en mode bounce
}}}
!! {{{wom_clearDeaths}}}
{{{
Contacter le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3, et effacer le compte des morts suspectes pour l'application $1 (par
défaut, all)
}}}
!! {{{wom__getApplications}}}
{{{
Obtenir des information sur la définition de l'application $1 (ou de
toutes les applications si $1=="") en contactant le moniteur sur l'hôte $2
avec éventuellement le mot de passe $3. Le résultat est un flux xml,
chaque application étant défini dans un tag <MApplications>. Si un erreur
se produit, l'erreur est dans un tag <Strings>
}}}
!! {{{wom__getApplications_filter}}}
{{{
filtrer le résultat de wom__getApplications en ne gardant que les tags
name, unixPath, macPath, winPath
}}}
!! {{{wom_getApplications}}}
{{{
Obtenir la liste des applications définies en contactant le moniteur sur
l'hôte $3 avec éventuellement le mot de passe $4, et initialiser le
tableau $1 avec une liste de valeurs quotées de la forme:
"'name' 'unixPath' 'macPath' 'winPath'"
concernant l'application $2 (par défaut, toutes les applications)
Ces valeurs peuvent être utilisées comme arguments d'une fonction. par
exemple:
wom_getApplications appinfos "" host pw
for args in "${appinfos[@]}"; do
eval "userfunc $args"
done
}}}
!! {{{wom_addApplication}}}
{{{
Ajouter une application nommée $1 en contactant le moniteur sur l'hôte $2,
avec éventuellement le mot de passe $3.
Soit le nom Name, par défaut l'exécutable se trouve dans
WOAPPLICATIONS/Name.woa/Name et les logs dans /var/log/WebObjects, et le
flag autoRecover est activé
XXX supporter la possibilité de modifier les valeurs par défaut
}}}
!! {{{wom_addInstance}}}
{{{
Ajouter une instance sur localhost pour l'application nommée $1 en
contactant le moniteur sur l'hôte $2, avec éventuellement le mot de passe
$3.
XXX supporter la possibilité de modifier les valeurs par défaut
}}}
!! {{{check_compute_apps_localhost}}}
{{{
si les arguments de compute_apps contiennent des bundles de framework, il
faut avoir accès au système de fichier local. vérifier si l'un des
arguments $2..* est un framework. si c'est le cas, vérifier que l'hôte $1
est localhost.
retourner 0 si c'est ok, 1 s'il y a des frameworks et que host n'est pas
localhost
}}}
!! {{{compute_apps}}}
{{{
Remplir le tableau $1(=apps) avec la liste des applications correspondant
aux arguments $3...*
Un bundle de framework (Name.framework) est remplacé par la liste des
bundles d'applications qui dépendent de ce framework. Cette information
est obtenue en consultant le système de fichier local.
Un bundle d'application est remplacé par la liste des applications qui
sont définies pour ce bundle. Cette information est obtenue en consultant
le tableau généré par wom_getApplications(), dont le nom est $2
Les arguments de la forme @N sont ignorés, ils correspondent à des délais
à respecter lors du démarrage de l'application
}}}
!! {{{get_error_msg}}}
!! {{{start_apps}}}
{{{
Démarrer les applications $3..$* en contactant le moniteur sur l'hôte $1
avec le mot de passe éventuel $2
Les variables globales enable_autorecover et force_enable_autorecover
permettent respectivement d'activer l'autoRecover après le démarrage de
l'application et de forcer l'activation de l'autoRecover même si
l'instance tournait déjà.
Un argument de la forme @N provoque une attente de N secondes. Ceci permet
de placer un temps d'attente entre le démarrage de certaines applications.
}}}
!! {{{stop_apps}}}
{{{
Arrêter les applications $3..$* en contactant le moniteur sur l'hôte $1
avec le mot de passe éventuel $2
Les variables globales disable_autorecover et force_disable_autorecover
permettent respectivement de désactiver l'autoRecover après l'arrêt de
l'application et de forcer la désactivation de l'autoRecover même si
l'instance ne tournait pas.
L'option {-a ARRAY} permet de remplir ARRAY avec la liste des applications
qui ont été effectivement arrêtées. Cette option si elle est spécifiée
doit être en premier
Pour compatibilité avec start_apps, les arguments de la forme @N sont
ignorés. Il n'y a pas de temps d'attente entre les applications lors de
l'arrêt.
}}}
!! {{{bounce_apps}}}
{{{
Redémarrer les applications $3..$* en mode bounce en contactant le
moniteur sur l'hôte $1 avec le mot de passe éventuel $2
Pour compatibilité avec start_apps, les arguments de la forme @N sont
ignorés. Il n'y a pas de temps d'attente entre les applications lors du
redémarrage.
}}}
!! {{{wosign_setup_maybe}}}
!! {{{wosign_jar}}}
!! {{{wosignable}}}
!! {{{wosign}}}
{{{
Signer un bundle, les jars d'un répertoire, ou un jar
L'option -f force la resignature des jars d'un répertoire ou d'un
bundle. Elle force aussi la signature d'un jar, même s'il semble qu'il
soit la version signée d'un autre jar
on présuppose que wosignable a retourné true
}}}
!! {{{wot_config}}}
{{{
Afficher la configuration de wotaskd
}}}
{{{
ulibshell: Lancer un shell après avoir chargé des modules de ulib
USAGE
ulibshell [options] [args...]
OPTIONS
-r module
Spécifier un module à charger avec urequire. Plusieurs modules peuvent
être spécifiés en les séparant par ':'
Un shell est lancé dans lequel les modules spécifiés sont chargés. Par défaut,
seul le module DEFAULTS est chargé. Les arguments sont passés inchangés au
shell.
}}}
{{{
ulibsync: Copier les librairies ulib et/ou pyulib
USAGE
ulibsync [options] destdir
OPTIONS
-u Copier ulib
-p Copier pyulib
}}}
{{{
ulink: déplacer, supprimer, copier un fichier ou un lien
Quand on déplace ou qu'on copie un lien, la destination du lien est mise à jour
USAGE
ulink mv files... dest
ulink cp files... dest
ulink rm files...
OPTIONS
-d UPDATEDIR
Chercher dans UPDATEDIR tous les liens qui pointent vers le fichier
concerné, et mettre à jour ces liens après avoir déplacé le fichier, ou
supprimer ces liens si le fichier est supprimé.
}}}
{{{
umatch: Afficher le résultat d'une recherche par regexp et compter
éventuellement leurs occurences
USAGE
umatch [options] [regexp]
Chaque ligne *entière* de stdin est mise en correspondance avec l'expression
regulière qui doit avoir la syntaxe de awk. S'il y a correspondance, afficher
soit toute l'expression matchée, soit chaque groupe s'il y a des expressions
parenthésées, chacun des groupes étant séparé par le caractère sep.
Si l'expression régulière n'est pas spécifiée, elle vaut par défaut '.*' ce qui
fait que toutes les lignes correspondent. Ceci peut être utile avec les options
-s et -c.
Certaines expressions régulières sont prédéfinies. regexp peut avoir l'une des
valeurs prédéfinies suivantes:
ip --> [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
OPTIONS
-F sep
Spécifier le caractère séparateur en sortie s'il faut afficher des
champs multiples. Par défaut, utiliser le caractère ':'
Si un séparateur vide est spécifié, le séparateur standard de awk est
utilisé.
-s Trier le résultat
-C FIELDNUM
-c, --count
Compter les occurences successives de la valeur du champ FIELDNUM, et
afficher une ligne de la forme 'count<sep>last_line' pour chaque groupe,
last_line étant la dernière occurence du groupe. L'option -c correspond
à '-C 0', c'est à dire compter les occurences successives de toute les
lignes.
Le séparateur utilisé pour calculer le numéro de champ est sep, spécifié
avec l'option -F.
-a, --all-lines
Avec les options -c/-C, afficher toutes les lignes des occurences
successives au lieu de seulement la ligne de la dernière occurence. Ceci
est utile surtout avec l'option -C, pour voir les différences avec les
différentes lignes.
-m, --multiple
Avec les options -c/-C, n'afficher que les lignes dont le compte est
supérieur à 1. Avec l'option -a, les groupes contigus sont séparés par
une ligne '--'
}}}
{{{
umirror: faire un miroir d'un site web
USAGE
umirror [options] url [wget_options]
OPTIONS
-l
Convertir les liens pour consultation locale
}}}
{{{
USAGE:
upassword -p [-f aeskeyfile] [clear [salts...]]
upassword -p [-f aeskeyfile] -j JKEY codetu [salts...]
upassword -p -f aeskeyfile -k crypted [salts...]
upassword -f aeskeyfile -G [password [salt]]
upassword -f aeskeyfile -s
upassword -f aeskeyfile -e clear
upassword -f aeskeyfile -d crypted
upassword --batch
OPTIONS
-p, --hash-password
Crypter un mot de passe (option par défaut). Si le mot de passe en clair
et/ou le salt ne sont pas spécifiés, ils sont choisis au hasard.
-j, --clear-is-codetu JKEY
Indiquer que l'argument clear est un numéro d'étudiant, à partir duquel
il faut générer le mot de passe. Cette option n'est valide qu'avec -p
-k, --clear-is-crypted
Indiquer que l'argument clear doit d'abord être décrypté avec la clé AES
spécifiée avant utilisation. Cette option n'est valide qu'avec -p
-G, --aes-genkey
Générer une clé AES pour utilisation avec les options -s, -e, -d
-s, --aes-showkey
Afficher encodée en base64 la clé AES contenue dans le fichier spécifié
-e, --aes-encrypt
Crypter un mot de passe avec la clé AES spécifiée
-d, --aes-decrypt
Décrypter un mot de passe avec la clé AES spécifiée
-f, --aes-keyfile
Spécifier le fichier contenant la clé AES. Cette option est obligatoire
avec les options -G, -s, -e et -d
--shell
Afficher les valeurs pour évaluation par le shell
MODE BATCH
Utiliser l'option --batch active le mode batch. Dans ce mode, chaque ligne est
un ensemble d'arguments, comme si on avait lancé le script à plusieurs reprises.
L'analyseur est limité: le découpage des arguments est fait sur les espaces.
Les lignes commençant par # sont ignorées.
Si une ligne commence par --batch-after, alors cette ligne est affichée après
chaque résultat. Ceci permet de générer un script qui peut être évalué.
Voici un exemple:
upassword --batch <<EOF
--batch-after process_password1 args
--shell
--shell fixed-password1
--batch-after process_password2 args
--shell fixed-password2
EOF
Le résultat serait quelque chose comme:
clear='<random-password>'
... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5
process_password1 args
clear='fixed-password1'
... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5
process_password1 args
clear='fixed-password2'
... # toutes les valeurs lm, ntlm, crypt, sha, xsha, ssha, md5, smd5
process_password2 args
}}}
{{{
update-nutools: mettre à jour nutools
}}}
{{{
uprefix: Afficher les préfixes valides pour uinst
USAGE
uprefix -l|--dump|prefix...
OPTIONS
-l
Afficher la liste des préfixes valides
--dump
Afficher la liste des préfixes valides et leurs valeurs
prefix
Afficher la valeur du préfixe spécifié
}}}
{{{
uproject: Outil pour gérer des projets
USAGE
uproject cmd [args]
COMMANDS
getvcs [dir]
Afficher le type de VCS pour dir.
getroot [dir]
Si dir est un répertoire versionné, retourner le répertoire racine du
projet versionné.
getrepos [dir]
Si dir est un répertoire versionné, retourner l'url du repository du
projet versionné.
geturl [dir]
Si dir est un répertoire versionné, retourner son url dans le
repository.
fold [dir]
unfold [dir]
Utiliser uinc pour défaire (resp. refaire) toutes les inclusions des
fichiers de dir. Cela nécessite qu'un fichier .udir soit configuré à la
racine du projet avec uinc=true
vcs [args]
Appeler le gestionnaire de gestion approprié avec les arguments donnés.
add files...
Ajouter les fichiers files dans le gestionnaire de version.
remove files...
Supprimer les fichiers versionnés files.
copy from to
Copier le fichier versionné from vers le fichier to.
move from to
Renommer le fichier versionné from vers le fichier to.
mkdir dir
Créer un nouveau répertoire versionné.
commit message [files...]
Enregistrer les modifications (par défaut sur tous les fichiers
modifiés) avec le commentaire message.
status
Afficher l'état des fichiers versionnés et non versionnés.
update [-x]
Mettre à jour la copie locale avec la copie sur le serveur.
-x Ne pas mettre à jour les références externes (si appliquable)
-n, --no-autoff
Ne pas faire de fast-forward automatique pour toutes les branches
traquées. Par défaut, s'il n'y a pas de modifications locales,
essayer de fast-fowarder toutes les branches locales traquées.
diff [options]
Afficher les différences.
-l Afficher les différences non commitées (par défaut)
-c Afficher les différences en passe d'être commitées (si appliquable)
-r REV
Afficher les différences depuis la révision REV.
-R Afficher les modifications effectuées depuis la dernière release.
clone git@host:path/to/repo [destdir]
Cloner un dépôt distant. 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]
Créer un dépôt distant sur gitolite, puis le cloner
develop
release
hotfix
Démarrer le travail sur une branche respectivement de développement, de
release, ou de correction de bugs. Lancer chaque commande avec --help
pour les détails. Nécessite git.
archive
Créer une archive du projet courant. Nécessite git.
annex [args]
Lancer git annex avec les arguments spécifiés.
xadd
xunlock
xdrop
xwhereis
xwebapp
Chacune de ces commandes est un raccourci vers la commande
correspondante de git annex, sans le préfixe 'x'
xsync
Sur un dépot où git-annex est activé, lancer 'git annex sync' si on est
en mode indirect ou 'git annex sync --content' si on est en mode direct.
Sur un dépôt où git-annex n'est pas activé, faire l'équivalent des
commandes 'git add -A && git commit && git pull && git push'
xcopy
xmove
xget
Comme ci-dessus, mais si la commande s'exécute sans erreur, lancer
aussi 'git annex sync'
xinitial
Sur un dépôt fraichement cloné, initialiser le dépôt avec 'annex init'
s'il contient des fichiers annexés. Récupérer aussi ces fichiers avec
'annex get'
xconfig-export [dir]
Installer des hooks pour qu'un dépôt puisse être utilisé pour servir des
fichiers, par exemple avec un serveur web. Plus précisément, un hook
post-receive est créé avec la commande 'git annex merge', et un hook
post-update est créé avec la commande 'git update-server-info'
printml [-t TYPE]
Afficher le modeline pour un fichier du type spécifié
addml [-t TYPE] file
Ajouter un modele pour le fichier spécifié, s'il n'en a pas déjà un.
Si nécessaire, forcer le type du fichier au lieu de l'autodétecter
new [options] file [template options]
Créer un nouveau fichier à partir d'un modèle.
Avant le nom du fichier, les options suivantes sont valides:
-t TEMPLATE
Spécifier le modèle de fichier à utiliser. Par défaut, le modèle
à utiliser est déduit de l'extension ou du nom du fichier.
-e Editer le fichier après l'avoir créé.
Après le nom du fichier, toutes les options sont spécifiques au modèle
utilisé pour créer le nouveau fichier. Utiliser l'option --help pour
avoir une description des options disponibles.
}}}
{{{
uscrontab: lancer une suite de commande en respectant une planification de type cron
USAGE
uscrontab [options] [/path/to/uscrontab] [var=value...]
uscrontab -e [/path/to/uscrontab]
uscrontab -l
La première forme du script doit normalement être lancé toutes les minutes par
une tâche cron. Utiliser l'option --install pour ajouter automatique la ligne
dans la crontab de l'utilisateur.
Avec la première forme du script, le fichier spécifié est traité. Si aucun
fichier n'est spécifié, fusionner s'il existe le fichier
/var/local/uscrontab/users/jclain
avec chacun des fichiers du répertoire
/var/local/uscrontab/users.d/jclain
dans un fichier temporaire, puis exécuter le fichier résultat avec le nom
virtuel
/var/local/uscrontab/jclain
note: le nom virtuel est utilisé pour le verrouillage avec --lock
A chaque lancement de ce script, le fichier /path/to/uscrontab spécifié est
examiné pour déterminer quels commandes doivent être exécutées. Ce fichier est
composé de lignes dans un format particulier, qui sont analysées et traitées
dans l'ordre.
Quelles que soient les lignes qui sont sélectionnées pour l'exécution, elles
sont garanties de s'exécuter dans l'ordre du fichier, l'une après l'autre.
Les définitions var=value mentionnées sur la ligne de commande sont des
définitions de variables à effectuer avant de lancer les commandes.
Les lignes commençant par # sont des commentaires et sont ignorées
== Définitions de variables et exécution de commandes ==
Les lignes de la forme suivante sont des définitions de variable:
[export] var="valeur de la variable"
Ces lignes sont des définitions de variable bash qui sont exécutées telles
quelles. Il n'est donc pas autorisé de mettre des espaces autour de =. Par
exemple, les lignes suivantes sont des erreurs de syntaxe:
var = bad
var=pas de quotes autour de la valeur
alors que celles-ci sont correctes:
var=ok
var="valeur avec des espaces"
var='on peut utiliser des quotes aussi'
Il est possible de manipuler les variables de type PATH avec une syntaxe
particulière de l'opérateur d'assignation. Les opérateurs += et %= utilisent
uaddpath(), #= utilise uinspath() et -= utilise udelpath(). Par exemple, les
lignes suivantes ajoutent respectivement /usr/local/nutools puis enlèvent
/opt/rogue au PATH:
PATH+=/usr/local/nutools
PATH-=/opt/rogue
Bien sûr, il ne faut pas oublier de quoter les espaces:
PATH+="/path/to/dir with spaces"
La syntaxe ?= permet de définir la valeur d'une variable si elle n'est pas
déjà définie:
var?=default
Les lignes de la forme suivante permettent d'exécuter une commande qui est
exécutée systématiquement et ignore la planification:
$one-line-command
Une variante permet de spécifier des commandes sur plusieurs lignes.
ATTENTION! ${ et $} doivent être tous seuls sur la ligne.
${
several
commands
...
$}
Ces commandes sont exécutées systématiquement et ignorent la planification.
On peut s'en servir notamment pour lire un fichier de configuration qui
définit des variables ou des fonctions:
$source path/to/file
Le code d'erreur de ces commandes est ignoré, contrairement à ce qui se
passe pour les commandes qui font l'objet d'une planification.
== Planification de commandes ==
Les autres lignes doivent être au format d'une ligne de crontab:
minutes hours days months dows command-line
command-line peut être n'importe quelle ligne de commande bash, pourvu
qu'elle soit sur une seule ligne.
Certaines extensions par rapport à la syntaxe de crontab sont autorisées. Il
est en particulier possible de spécifier plusieurs planifications pour une
seule commande. Par exemple, les lignes suivantes permettent d'exécuter
'command' toutes les heures ET à 1h05:
0 * * * *
5 1 * * * command
Il est aussi possible d'utiliser la même planification pour plusieurs
commandes sans devoir répéter la définition de la planification. Les lignes
suivantes planifient command1 et command2 toutes les heures:
0 * * * * command1
command2
Pour être prise en compte, la ligne command2 doit commencer par au moins un
espace ou une tabulation. Pour la lisibilité, la syntaxe suivante est
supportée aussi:
0 * * * *
command1
command2
Les deux formats peuvent être utilisés ensemble. Par exemple les lignes
suivantes exécutent command1 et command2 toutes les heures ET à 1h05:
0 * * * *
5 1 * * * command1
command2
Par défaut, le script s'arrête à la première commande planifiée qui retourne
avec un code d'erreur. Il est possible d'ignorer le code d'erreur d'une
commande avec nostop, e.g:
0 * * * * nostop command
Cf aussi l'option --continuous pour modifier le comportement par défaut
== Fonctions disponibles ==
La fonction check_pidfile() est disponible, et permet de vérifier qu'une
opération n'est pas déjà en cours. Si cette fonction est utilisée, il ne
faut pas modifier la valeur de -k. Par exemple:
0 1 * * *
check_pidfile /path/to/pid [args]
long-running-script
check_pidfile() doit être utilisée toute seule sur la ligne et s'utilise
avec les argument suivants:
check_pidfile PIDFILE [DESC] [BARRIER]
- PIDFILE est le fichier de PID qui est vérifié
- DESC est la description du traitement qui est effectué. La valeur par
défaut est "Une synchronisation". Si le fichier de PID est présent, le
message suivant est affiché:
DESC est en cours.
Si vous pensez que c'est une erreur, veuillez vérifier le process de pid PID
puis supprimez le cas échéant le fichier PIDFILE
- BARRIER est un fichier qui est créé avec le contenu 'PID' s'il n'existe
pas encore, et si la vérification du fichier de PID est faite avec succès.
La présence de ce fichier peut-être vérifiée par un processus externe pour
empêcher par exemple de mettre à jour les scripts pendant qu'il sont en
train de tourner.
Son contenu peut être examiné pour connaître le PID du processus qui l'a
créé initialement. Le fichier est automatiquement supprimé à la fin de ce
script.
Attention: ce fichier n'est pas un verrou, il peut être supprimé à tout
moment. Notamment, si deux scripts sont configurés pour créer le même
fichier barrière, le premier script supprimera le fichier barrière avant
la fin de l'exécution du second script.
La fonction remove_pidfile() permet de supprimer un fichier de pid pour
spécifier qu'une opération est terminée. Considérons l'exemple suivant:
0 1 * * *
check_pidfile /path/to/pid
script1
script2
remove_pidfile /path/to/pid
script3
Dans cet exemple, il ne faut pas qu'une autre occurence de script1 tourne
pendant que script2 tourne. Par contre, plusieurs occurences de script3
peuvent tourner en parallèle.
La fonction elogto() permet de spécifier un fichier vers lequel toutes les
sorties sont redirigées.
OPTIONS
-A, --install
Installer une planification toutes les minutes du script dans la crontab
de l'utilisateur. Si l'argument /path/to/uscrontab n'est pas spécifié,
c'est une planification générique qui exécute les fichiers par défaut
qui est installée.
-R, --uninstall
Désinstaller la planification toutes les minutes du script de la crontab
de l'utilisateur. Si l'argument /path/to/uscrontab est spécifié, cette
instance est désinstallée. Sinon, ne désinstaller que la planification
générique.
-d, --disable-only
Avec l'option -R, désactiver la planification au lieu de la supprimer.
-e, --edit
Lancer un editeur pour modifier l'uscrontab spécifiée. Si aucun fichier
n'est spécifié, éditer /var/local/uscrontab/users/jclain
-a, --add
Installer un script uscrontab dans le répertoire approprié. L'argument
doit être de la forme [name:]/path/to/uscrontab
Si name n'est pas spécifié, le nom de base du fichier spécifié est
utilisé. Si name est vide ou vaut $USER (soit jclain en l'occurence),
copier le fichier spécifié vers le chemin /var/local/uscrontab/users/jclain
Sinon, copier le fichier spécifié vers /var/local/uscrontab/users.d/jclain/name
-r, --remove
Supprimer le script uscrontab spécifié. L'argument doit être le nom du
script à supprimer. Si l'argument n'est pas spécifié ou vaut $USER
(soit jclain en l'occurence), supprimer le fichier /var/local/uscrontab/users/jclain
s'il existe
-l, --list
Si l'argument /path/to/crontab est spécifié, afficher le contenu de ce
fichier. Sinon, lister les contenus des fichiers crontab qui sont
exécutés avec la planification actuelle. Si une planification générique
est installée, ou si aucune planification n'est en cours, afficher le
contenu du fichier
/var/local/uscrontab/users/jclain
et chacun des fichiers du répertoire
/var/local/uscrontab/users.d/jclain
-n, --fake
Afficher au lieu de les exécuter les commandes qui doivent être lancées
-P, --pause-for NBMINS
Désactiver les planifications pendant NBMINS minutes. Utiliser -1 pour
désactiver les planifications sans limite de durée. Pendant la période
de pause, toutes les invocations de uscrontab n'ont aucun effet, sauf si
on utilise l'option --force
-Y, --unpause
Réactiver les planifications après une mise en pause
-p, --pause
Désactiver les planifications pendant 1 journée. Equivalent à -P 1440
-f, --force
Forcer l'exécution de la planification, même si elle a été mise en pause
avec l'option --pause
OPTIONS AVANCEES
--lock LOCKFILE
Inscrire dans le fichier spécifié des informations permettant d'éviter
les invocations simultanées de ce script. Si selon ce fichier, le script
tourne depuis plus de 8 heures, un message d'erreur
est consigné et un message d'avertissement est affiché au plus une fois.
Utiliser --lock '' pour désactiver cette fonctionnalité
Par défaut, si ce script est lancé en root, le fichier utilisé pour le
verrouillage est de la forme /var/run/uscrontab/abspath/to/crontab
Si le script est lancé avec un compte utilisateur, aucun verrouillage
n'est effectué.
--lockdelay LOCKDELAY[=8]
Changer le nombre d'heures pendant lesquelles on autorise le script a
verrouiller l'exécution avant d'afficher un avertissement.
-c, --continuous
Par défaut, ce script s'arrête à la première commande planifiée qui
retourne avec un code d'erreur. Notez que les codes d'erreur des
commandes sans planification sont toujours ignorés. Avec cette option,
ce script ne s'arrête jamais, bien qu'il retourne toujours un code
d'erreur si une erreur s'est produite. Il est possible d'ignorer le
code d'erreur pour une commande en particulier avec le préfixe nostop
-k, --stopec EXITCODE[=101]
Spécifier un code d'erreur spécial qui arrête ce script sans erreur, ou
'' pour désactiver cette fonctionnalité. Ceci permet en début de script
de faire des tests par exemple sur l'environnement avant de lancer les
scripts planifiés. Si l'environnement ne convient pas, il suffit au
script de contrôle de retourner le code d'erreur spécifique pour arrêter
le traitement.
--show-ctnow
Afficher l'heure de référence au format crontab 'min hou day mon dow'
Cette valeur peut être utilisée avec l'option --force-ctnow dans des
tests pour reproduire une condition spécifique.
--force-ctnow 'min hou day mon dow'
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.
}}}
{{{
ussh: se connecter par ssh à un ou plusieurs hôtes
USAGE
ussh [options] hosts
ussh [options] @hostsfile
ussh -r hosts
ussh --parse hosts
OPTIONS
hosts
@hostsfile
Spécifier un ou plusieurs hôtes distants sur lequels faire la connexion.
Pour spécifier plusieurs hôtes, il faut les séparer 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
'root@{host1,host2}.univ.run'
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
hostsfile, à raison d'un hôte par ligne.
Toutes les options de ssh sont reconnues. Les options longues suivantes sont
reconnues comme alias de certaines options courtes de ssh:
--quiet
alias de -q, activer le mode non verbeux
--tty
alias de -t, forcer l'allocation d'un TTY
--login USER
alias de -l, spécifier le user avec lequel se connecter
--port PORT
alias de -p, spécifier le port sur lequel se connecter
Les options suivantes sont exclusives à ce script:
-d, --domain DOMAIN
Spécifier un domaine par défaut pour les hôtes qui sont spécifiés sans
domaine.
-z, --ssh SSH
Spécifier l'exécutable à utiliser pour lancer ssh.
-r, --remove
Lancer 'ssh-keygen -R' pour chacun des hôtes spécifiés avant de s'y
connecter. Par exemple:
ussh -r host.tld
est équivalent à:
ssh-keygen -R host.tld
ssh-keygen -R host
ssh-keygen -R 10.10.1.5
ssh host.tld
si l'adresse ip de host.tld est 10.10.1.5
Quand cette option est spécifié, l'option -j est reconnue et permet de
NE PAS se reconnecter à l'hôte juste après avoir nettoyé les clés. Avec
l'option -j, TOUS les arguments sont des noms d'hôte puisqu'aucune
connexion n'est effectuée.
--exec
--no-exec
Avec --exec, si un seul hôte est spécifié, lancer le processus ssh avec
exec, pour éviter d'encombrer la mémoire. C'est l'option par défaut.
Avec --no-exec, ne jamais utiliser exec pour lancer ssh.
--parse
Afficher la définition des variables ssh, options, hosts et args qui
permettent d'effectuer la connexion à partir d'un autre script. Exemple:
eval "$(ussh --parse args...)"
for host in "${hosts[@]}"; do
${exec:+exec} "$ssh" "${options[@]}" "$host" "${args[@]}"
done
--cc
Assumer que nutools est installé sur l'hôte distant, et y lancer uwatch
avec l'option --cc, pour permettre de garder la connexion active dans le
cadre d'une redirection de port.
Si la variable UTOOLS_USSH_RSYNC_SUPPORT contient une valeur non vide, l'analyse
des arguments s'arrête à la première valeur qui n'est pas une option, afin de
permettre l'utilisation de ce script avec l'option -e de rsync.
}}}
{{{
usysinfos: Afficher les informations sur le système
USAGE
usysinfos [query]
Si la requête est spécifiée, tester si le système courant correspond à la
requête. Voir la doc de check_sysinfos() pour le format de la requête.
Sinon, afficher les informations sur le système courant.
}}}
{{{
utempl: Créer un nouveau fichier à partir d'un modèle
USAGE
utempl [options] file [template options]
OPTIONS
Avant le nom du nouveau fichier, les options suivantes peuvent être utilisées:
-t TEMPLATE
Spécifier le modèle de fichier à utiliser. Par défaut, le modèle
à utiliser est déduit de l'extension ou du nom du fichier.
-e, --edit
Editer le fichier après l'avoir créé
-g, --no-edit
Ne pas éditer le fichier après l'avoir créé
Après le nom du fichier, toutes les options sont spécifiques au modèle
utilisé pour créer le nouveau fichier. Utiliser l'option --help pour
avoir une description des options disponibles.
}}}
{{{
utrigger: lancer une commande en différé
USAGE
utrigger [options] -- command [args]
La commande est lancée après un certain temps, sauf si ce script est rappelé
(auquel cas le compte est réinitialisé), ou si l'opération est annulée.
Attention! La commande est lancée en tâche de fond, et son entrée standard est
connectée à un fichier qui peut être provisionné avec l'option -a
note: ce script ne fonctionne que sous Linux puisqu'il utilise la commande flock
OPTIONS
-n, --name NAME
Spécifier un nom identifiant la tâche. Par défaut, le nom est généré à
partir des détails de la tâche à lancer. Ce nom est utilisé pour
identifier les invocations successives.
-f, --cmdfile CMDFILE
Spécifier un fichier contenant les commandes à lancer. Le fichier est
sourcé dans un sous-shell. Utiliser - pour lire les commandes depuis
l'entrée standard.
--rundelay RUNDELAY[=5]
Nombre de secondes au bout desquelles la commande est lancée. Si ce
script est relancé avant la fin de ce décompte, le compte est remis à
zéro.
Utiliser --rundelay '' pour désactiver cette fonctionnalité, auquel cas
la commande est lancée immédiatement.
-s, --sudo
Forcer l'exécution de la commande avec l'utilisateur root si ce n'est
pas déjà le cas
-a, --datafile DATAFILE
Accumuler des données à fournir à la commande. Les informations du
fichier DATAFILE (utiliser - pour l'entrée standard) sont ajoutées à un
fichier temporaires, et sont fournies en une seule fois à la commande
sur son entrée standard.
-A, --data DATA
Variante de --datafile où les données sont fournies sur la ligne de
commande au lieu d'un fichier externe. Si les deux options -a et -A sont
spécifiées, les données sont accumulées dans l'ordre --datafile puis
--data
-k, --cancel
Annuler le lancement planifié d'une commande. Si la commande est déjà en
train de tourner, cette option n'a aucun effet.
}}}
{{{
uwatch: afficher l'heure
USAGE
uwatch [options]
OPTIONS
-t, --time
Afficher l'heure (par défaut)
-c, --count
Afficher le temps écoulé depuis le lancement de ce script
-u, --units
Avec l'option --count, afficher l'unité: sec., min. ou heures
-o, --offset NBSEC
Avec l'option --count, spécifier un nombre de secondes à partir duquel
compter
-s, --step NBSECS[=1]
Spécifier la période de rafraichissement de l'affichage
-a, --prefix PREFIX
Spécifier une chaine à afficher avant l'heure
-z, --suffix SUFFIX
Spécifier une chaine à afficher après l'heure
--cc
Equivalent à -c -s 5 -a 'Connecté sur $MYHOST depuis ' -z '...'
Permet de garantir une activité sur une connexion SSH utilisée
uniquement pour faire une redirection de port
}}}
{{{
vzusage: afficher des informations sur une machine virtuelle OpenVZ
USAGE
vzusage [options] [params...]d
OPTIONS
-b Afficher les informations de /proc/user_beancounters
-f N'afficher que les valeurs pour lesquelles failcnt > 0.
Implique -b
-z coef
Afficher les instructions à utiliser pour augmenter de coef% les
valeurs pour lesquelles failcnt > 0. Implique -f
-c config|veid
Afficher les informations du fichier de configuration plutôt que les
beancounters
}}}
{{{
woArchive: créer une archive de la distribution WebObjects en cours
USAGE
woArchive [-n name] [-f files]
OPTIONS
-n NAME
Nom de base de l'archive. Par défaut il s'agit de WebObjects-<version>
-f FILES
Nom de la liste des fichiers de l'archives. Par défaut il s'agit de
$NAME.files
}}}
{{{
woSwitch: Changer la version de WebObjects pour le système en cours
USAGE
woSwitch [-f from.files] to-archive.tar.gz
OPTIONS
-f from.files
Spécifier la liste des fichiers pour la version de WebObjects
installée. Par défaut, il s'agit de WebObjects-<version>.files
La liste doit correspondre à la version en cours.
-F Forcer l'installation, même si la version en cours ne correspond pas à ce
qui est inscrit dans from.files
to-archive.tar.gz
Nom de l'archive qui contient la version à installer.
Ce script ne fonctionne que sur MacOS X
Le contenu des répertoires suivants est sauvegardé avant le changement:
/Library/WebObject/Applications
/Library/WebObject/Configuration
/Library/WebObject/Extensions
Ensuite, les répertoires Applications et Configuration sont restaurés. Il faudra
restaurer Extensions manuellement.
}}}
{{{
woctl: Contrôler des applications WebObjects
USAGE
woctl [options] action args
wostart args...
wostop args...
wobounce args...
worestart args...
OPTIONS
-h HOST
Spécifier l'hôte qui fait tourner le moniteur sous la forme host[:port]
-p PASSWORD
Spécifier le mot de passe pour le moniteur
ACTIONS
Dans les arguments des actions ci-dessous, une application peut être
spécifiée sous la forme App ou App.woa. Spécifier une application revient à
spécifier toutes les instances configurées pour cette application.
Si on spécifie un framework sous la forme Fwk.framework, cela revient à
spécifier toutes les applications qui dépendent de ce framework.
Sinon, une instance individuelle est de la forme App-N, où N est un entier
positif.
status
afficher l'état des instances qui tournent actuellement
version
afficher la version de WebObjects installée
wotaskd
javamonitor
woservices
piloter wotaskd/javamonitor
_create
créer une instance par défaut dans javamonitor
configure
configurer un bundle
tag
ajouter une information de version à un bundle
run
lancer une application localement en mode debug
download
télécharger une application ou un framework
start apps...
démarrer une ou plusieurs applications
stop apps...
arrêter une ou plusieurs applications
restart apps...
relancer une ou plusieurs applications
bounce apps...
relancer une ou plusieurs applications en mode bounce
}}}
{{{
woinst: Déployer un bundle (application ou framework) de WebObjects
USAGE
woinst [options] <file|archive|dir>...
OPTIONS
PREFIX=value
Spécifier une valeur pour un préfixe, plutôt que de laisser uprefix
l'autodétecter. Utiliser uprefix -l pour une liste de préfixes valides.
-b Redémarrer les instances en mode bounce.
Par défaut, les instances sont arrêtées avant le déploiement, et
redémarrées après
-W Ne déployer que les resources web. Implique -n
-n Ne pas tagger les bundles déployés avec un numéro de version. Par
défaut, l'utilisateur est invité à compléter des informations telles
que n° de version et date de release si ces informations ne sont pas
disponible.
-x CMD
Exécuter la commande CMD après avoir effectué le déploiement
}}}
{{{
wosign: signer les jars d'un bundle
USAGE
wosign <app.woa|fwk.framework|file.jar>
OPTIONS
-f Forcer la (re)signature des jars
-d Enlever la signature des jars originaux
-s Signer les jar du bundle [PAR DEFAUT]
--init
Initialiser les fichiers de configuration pour la signature des bundles.
--sudo
Si le répertoire de destination des fichiers de configuration n'est
accessible en écriture, relancer le script en root.
}}}