doinplace fonctionne comme la fonction. la version étendue est un lien nommé doinplacex

This commit is contained in:
Jephté Clain 2016-03-01 17:04:25 +04:00
parent d6540ac596
commit d661e439cb
2 changed files with 36 additions and 9 deletions

View File

@ -1,5 +1,16 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
TOOLS=(doinplacef doinplacex)
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
# créer les liens
scriptname="$(basename "$0")"
for tool in "${TOOLS[@]}"; do
ln -s "$scriptname" "$tool"
done
exit 0
fi
source "$(dirname "$0")/lib/ulib/ulib" || exit 1 source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire base urequire base
@ -7,11 +18,10 @@ function display_help() {
uecho "$scriptname: filtrer en place un fichier à travers une suite de commandes uecho "$scriptname: filtrer en place un fichier à travers une suite de commandes
USAGE USAGE
$scriptname FILE COMMANDS... $scriptname FILE COMMAND [ARGS...]
Une ou plusieurs commandes peuvent être spécifiées, séparées par // Si on utilise une commande avec des options, penser à utliser '--' pour séparer
Si on utilise des commandes avec des options, penser à utliser '--' pour séparer les options de ce script des options de la commande
les options de ce script des options des commandes
En plus des commandes systèmes, il est possible d'utiliser toute fonction de 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, nutools qui effectue des traitement sur un flux comme stripnl, filter_empty,
@ -19,11 +29,17 @@ merge_contlines, filter_comment, filter_conf, etc. Les fonctions nl2lf, nl2crlf,
nl2cr, latin1compat et noaccents sont aussi disponibles par convenance. nl2cr, latin1compat et noaccents sont aussi disponibles par convenance.
OPTIONS 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 -g, --ignore-error, --replace-always
Normalement, le fichier n'est pas remplacé si la commande retourne une 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 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 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." 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"
} }
function nl2lf() { _nl2lf; } function nl2lf() { _nl2lf; }
@ -32,17 +48,27 @@ function nl2cr() { _nl2cr; }
function latin1compat() { _latin1compat; } function latin1compat() { _latin1compat; }
function noaccents() { _noaccents; } function noaccents() { _noaccents; }
replace= [ "$scriptname" == doinplacex ] && evalp=1 || evalp=
[ "$scriptname" == doinplacef ] && replace=1 || replace=
args=( args=(
--help '$exit_with display_help' --help '$exit_with display_help'
-p,--evalp evalp=1
-g,--ignore-error,--replace-always replace=1 -g,--ignore-error,--replace-always replace=1
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
file="$1"; shift file="$1"; shift
if [ -n "$evalp" ]; then
if [ -n "$replace" ]; then if [ -n "$replace" ]; then
doinplacef "$file" evalp "$@" doinplacef "$file" evalp "$@"
else else
doinplace "$file" evalp "$@" doinplace "$file" evalp "$@"
fi fi
else
if [ -n "$replace" ]; then
doinplacef "$file" "$@"
else
doinplace "$file" "$@"
fi
fi
exit $? exit $?

View File

@ -32,6 +32,7 @@ done
./uawk --nutools-makelinks ./uawk --nutools-makelinks
./udist --nutools-makelinks ./udist --nutools-makelinks
./ulink --nutools-makelinks ./ulink --nutools-makelinks
./doinplace --nutools-makelinks
# complétion programmable # complétion programmable
rm -f ~/etc/bashrc.d/bash_completion.nutools # renommé rm -f ~/etc/bashrc.d/bash_completion.nutools # renommé