foreach: ajouter l'option --parent
This commit is contained in:
parent
63e78f44ef
commit
d056be4a2a
56
foreach
56
foreach
|
@ -18,17 +18,29 @@ Exemple:
|
|||
|
||||
OPTIONS
|
||||
-b, --basedir BASEDIR
|
||||
Chercher les expressions -d, -g, -f, -a à partir de BASEDIR au lieu du
|
||||
Chercher les expressions -d, -f, -a à partir de BASEDIR au lieu du
|
||||
répertoire courant.
|
||||
-d, --dir
|
||||
Faire la correspondance de l'expression sur les répertoires
|
||||
-g, --go
|
||||
Comme -d, mais pour chaque répertoire, lancer la commande après en avoir
|
||||
fait le répertoire courant.
|
||||
Faire la correspondance de l'expression sur les répertoires uniquement
|
||||
-f, --file
|
||||
Faire la correspondance de l'expression sur les répertoires
|
||||
Faire la correspondance de l'expression sur les fichier uniquement
|
||||
-a, --all
|
||||
Faire la correspondance de l'expression sur les répertoires
|
||||
Faire la correspondance de l'expression sur les répertoires et les
|
||||
fichiers
|
||||
-p, --parent
|
||||
Pour chaque fichier/répertoire, se placer dans le répertoire parent
|
||||
avant de lancer la commande. item est aussi modifié pour ne plus
|
||||
contenir que le nom de la cible (qui est désormais dans le répertoire
|
||||
courant)
|
||||
Cette option a la priorité sur --go
|
||||
-g, --go
|
||||
Si la cible est un répertoire, en faire le répertoire courant avant de
|
||||
lancer la commande. Si la cible est un fichier, faire comme --parent et
|
||||
se placer dans le répertoire du fichier avant de lancer la commande.
|
||||
Dans les deux cas, item est modifié pour ne plus contenir que le nom de
|
||||
la cible, soit '.' pour le répertoire courant, soit le nom du fichier
|
||||
dans le répertoire courant.
|
||||
Si cette option est mentionnée seule, elle implique --dir
|
||||
-s, --string
|
||||
Evaluer la chaine avec le shell
|
||||
-t, --title
|
||||
|
@ -38,22 +50,32 @@ OPTIONS
|
|||
}
|
||||
|
||||
basedir=
|
||||
match=all
|
||||
match=auto
|
||||
changedir=
|
||||
parentdir=
|
||||
title=1
|
||||
args=(+
|
||||
--help '$exit_with display_help'
|
||||
-b:,--basedir: basedir=
|
||||
-d,--dir match=dir
|
||||
-g,--go '$match=dir; changedir=1'
|
||||
-f,-file match=file
|
||||
-a,--all match=all
|
||||
-p,--parent parentdir=1
|
||||
-g,--go changedir=1
|
||||
-s,--string match=string
|
||||
-t,--title title=1
|
||||
--no-title title=
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
if [ "$match" == auto ]; then
|
||||
if [ -n "$changedir" ]; then
|
||||
match=dir
|
||||
else
|
||||
match=all
|
||||
fi
|
||||
fi
|
||||
|
||||
varexpr="$1"; shift
|
||||
splitfsep2 "$varexpr" = varname expr
|
||||
[ -n "$varname" ] || varname=item
|
||||
|
@ -76,7 +98,21 @@ let index=0
|
|||
for item in "${items[@]}"; do
|
||||
[ -n "$title" ] && etitle "$item"
|
||||
(
|
||||
[ -n "$changedir" ] && cd "$item"
|
||||
if [ -n "$changedir" ]; then
|
||||
if [ -f "$item" ]; then
|
||||
parentdir=1
|
||||
elif [ ! -d "$item" ]; then
|
||||
ewarn "$item: n'est pas un répertoire"
|
||||
changedir=
|
||||
fi
|
||||
fi
|
||||
if [ -n "$parentdir" ]; then
|
||||
cd "$(dirname -- "$item")"
|
||||
item="$(basename -- "$item")"
|
||||
elif [ -n "$changedir" ]; then
|
||||
cd "$item"
|
||||
item=.
|
||||
fi
|
||||
eval "export $(echo_setv "$varname" "$item"); ${cmd[*]}"
|
||||
)
|
||||
[ -n "$title" ] && eend "$item"
|
||||
|
|
Loading…
Reference in New Issue