foreach: ajouter l'option --parent
This commit is contained in:
parent
63e78f44ef
commit
d056be4a2a
56
foreach
56
foreach
|
@ -18,17 +18,29 @@ Exemple:
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-b, --basedir BASEDIR
|
-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.
|
répertoire courant.
|
||||||
-d, --dir
|
-d, --dir
|
||||||
Faire la correspondance de l'expression sur les répertoires
|
Faire la correspondance de l'expression sur les répertoires uniquement
|
||||||
-g, --go
|
|
||||||
Comme -d, mais pour chaque répertoire, lancer la commande après en avoir
|
|
||||||
fait le répertoire courant.
|
|
||||||
-f, --file
|
-f, --file
|
||||||
Faire la correspondance de l'expression sur les répertoires
|
Faire la correspondance de l'expression sur les fichier uniquement
|
||||||
-a, --all
|
-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
|
-s, --string
|
||||||
Evaluer la chaine avec le shell
|
Evaluer la chaine avec le shell
|
||||||
-t, --title
|
-t, --title
|
||||||
|
@ -38,22 +50,32 @@ OPTIONS
|
||||||
}
|
}
|
||||||
|
|
||||||
basedir=
|
basedir=
|
||||||
match=all
|
match=auto
|
||||||
changedir=
|
changedir=
|
||||||
|
parentdir=
|
||||||
title=1
|
title=1
|
||||||
args=(+
|
args=(+
|
||||||
--help '$exit_with display_help'
|
--help '$exit_with display_help'
|
||||||
-b:,--basedir: basedir=
|
-b:,--basedir: basedir=
|
||||||
-d,--dir match=dir
|
-d,--dir match=dir
|
||||||
-g,--go '$match=dir; changedir=1'
|
|
||||||
-f,-file match=file
|
-f,-file match=file
|
||||||
-a,--all match=all
|
-a,--all match=all
|
||||||
|
-p,--parent parentdir=1
|
||||||
|
-g,--go changedir=1
|
||||||
-s,--string match=string
|
-s,--string match=string
|
||||||
-t,--title title=1
|
-t,--title title=1
|
||||||
--no-title title=
|
--no-title title=
|
||||||
)
|
)
|
||||||
parse_args "$@"; set -- "${args[@]}"
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
|
if [ "$match" == auto ]; then
|
||||||
|
if [ -n "$changedir" ]; then
|
||||||
|
match=dir
|
||||||
|
else
|
||||||
|
match=all
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
varexpr="$1"; shift
|
varexpr="$1"; shift
|
||||||
splitfsep2 "$varexpr" = varname expr
|
splitfsep2 "$varexpr" = varname expr
|
||||||
[ -n "$varname" ] || varname=item
|
[ -n "$varname" ] || varname=item
|
||||||
|
@ -76,7 +98,21 @@ let index=0
|
||||||
for item in "${items[@]}"; do
|
for item in "${items[@]}"; do
|
||||||
[ -n "$title" ] && etitle "$item"
|
[ -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[*]}"
|
eval "export $(echo_setv "$varname" "$item"); ${cmd[*]}"
|
||||||
)
|
)
|
||||||
[ -n "$title" ] && eend "$item"
|
[ -n "$title" ] && eend "$item"
|
||||||
|
|
Loading…
Reference in New Issue