support des options --[no-]recursive et --[no-]poweroff
This commit is contained in:
parent
a7ee78fb7f
commit
f34f32a7a3
7
TODO.md
7
TODO.md
|
@ -1,12 +1,5 @@
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
* ajouter une option pour ne pas démonter les systèmes des fichier
|
|
||||||
récursivement. dans ce cas, umountr == umount
|
|
||||||
|
|
||||||
* ajouter une option --off qui serait activée par défaut pour les montages dans
|
|
||||||
/media, et qui éteindrait le périphérique associée au montage après démontage
|
|
||||||
du système de fichier.
|
|
||||||
|
|
||||||
* autocomplétion pour umountr comme pour umount
|
* autocomplétion pour umountr comme pour umount
|
||||||
|
|
||||||
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary
|
110
umountr
110
umountr
|
@ -9,19 +9,36 @@ function display_help() {
|
||||||
USAGE
|
USAGE
|
||||||
$scriptname mountpoint
|
$scriptname mountpoint
|
||||||
|
|
||||||
Démonter tous les systèmes de fichiers qui sont montés en-dessous de mountpoint
|
|
||||||
puis démonter mountpoint. Démonter aussi tous les systèmes de fichiers
|
|
||||||
bind-montés à partir d'un sous-répertoire de mountpoint.
|
|
||||||
|
|
||||||
OPTION
|
OPTION
|
||||||
-c, --continuous
|
-c, --continuous
|
||||||
Continuer même en cas d'erreur"
|
Continuer même en cas d'erreur
|
||||||
|
-r, --recursive
|
||||||
|
-1, --no-recursive
|
||||||
|
Spécifier le type de démontage:
|
||||||
|
Avec -1, un démontage simple est effectué, comme avec umount. Ce type de
|
||||||
|
démontage est automatiquement sélectionné pour les systèmes de fichier
|
||||||
|
montés sous le répertoire /media
|
||||||
|
Avec -r, le démontage est récursif: tous les systèmes de fichiers qui
|
||||||
|
sont montés en-dessous de mountpoint sont démontés puis mountpoint est
|
||||||
|
démonté. Tous les systèmes de fichiers bind-montés à partir d'un sous-
|
||||||
|
répertoire de mountpoint sont démontés aussi.
|
||||||
|
-o, --poweroff
|
||||||
|
-k, --no-poweroff
|
||||||
|
Après avoir démonté le système de fichier mountpoint, éteindre le
|
||||||
|
périphérique qui y correspond. --poweroff est automatiquement activé
|
||||||
|
pour les systèmes de fichier montés sous le répertoire /media"
|
||||||
}
|
}
|
||||||
|
|
||||||
continuous=
|
continuous=
|
||||||
|
recursive=auto
|
||||||
|
poweroff=auto
|
||||||
args=(
|
args=(
|
||||||
--help '$exit_with display_help'
|
--help '$exit_with display_help'
|
||||||
-c,--continuous continuous=1
|
-c,--continuous continuous=1
|
||||||
|
-r,--recursive recursive=1
|
||||||
|
-1,--no-recursive recursive=
|
||||||
|
-o,--poweroff poweroff=1
|
||||||
|
-k,--no-poweroff poweroff=
|
||||||
)
|
)
|
||||||
parse_args "$@"; set -- "${args[@]}"
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
|
@ -30,26 +47,89 @@ mountp="$1"
|
||||||
[ -d "$mountp" ] || die "$mountp: répertoire introuvable"
|
[ -d "$mountp" ] || die "$mountp: répertoire introuvable"
|
||||||
setx mountp=abspath "$mountp"
|
setx mountp=abspath "$mountp"
|
||||||
|
|
||||||
run_as_root ${continuous:+-c} "$@"
|
args=(
|
||||||
|
$(get_verbosity_option) $(get_interaction_option)
|
||||||
|
${continuous:+-c}
|
||||||
|
)
|
||||||
|
if [ "$recursive" == 1 ]; then array_add args --recursive
|
||||||
|
elif [ -z "$recursive" ]; then array_add args --no-recursive
|
||||||
|
fi
|
||||||
|
if [ "$poweroff" == 1 ]; then array_add args --poweroff
|
||||||
|
elif [ -z "$poweroff" ]; then array_add args --no-poweroff
|
||||||
|
fi
|
||||||
|
run_as_root "${args[@]}" "$mountp"
|
||||||
|
|
||||||
|
if withinpath /media "$mountp"; then
|
||||||
|
[ "$recursive" == auto ] && recursive=
|
||||||
|
[ "$poweroff" == auto ] && poweroff=1
|
||||||
|
else
|
||||||
|
[ "$recursive" == auto ] && recursive=1
|
||||||
|
[ "$poweroff" == auto ] && poweroff=
|
||||||
|
fi
|
||||||
|
|
||||||
|
etitle "Calcul des informations"
|
||||||
|
|
||||||
setx -a mountps=findmnt -nlo TARGET
|
setx -a mountps=findmnt -nlo TARGET
|
||||||
array_contains mountps "$mountp" || die "Vous devez spécifier un répertoire de montage valide"
|
array_contains mountps "$mountp" || die "$mountp: répertoire de montage invalide"
|
||||||
|
|
||||||
function show_all() {
|
function show_all() {
|
||||||
findmnt -T "$mountp" -Rnlo TARGET
|
findmnt -T "$mountp" -Rnlo TARGET
|
||||||
findmnt -nlo TARGET | awkrun mountp="$mountp" '{ if (substr($0, 1, length(mountp) + 1) == (mountp "/")) print }'
|
findmnt -nlo TARGET | awkrun mountp="$mountp" '{ if (substr($0, 1, length(mountp) + 1) == (mountp "/")) print }'
|
||||||
}
|
}
|
||||||
|
if [ -n "$recursive" ]; then
|
||||||
|
estepi "Type de démontage: récursif"
|
||||||
|
|
||||||
|
setx -a mounts=evalp show_all // sort -u // \
|
||||||
|
awk '{print length($0) "," $0}' // \
|
||||||
|
sort -nr // \
|
||||||
|
awk '{sub(/[0-9]+,/, ""); print}'
|
||||||
|
|
||||||
|
estepi "${#mounts[*]} systèmes de fichier à démonter"
|
||||||
|
if show_debug; then
|
||||||
|
edebug "Les systèmes de fichiers suivants seront démontés:"
|
||||||
|
for mount in "${mounts[@]}"; do
|
||||||
|
estep "$mount"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
estepi "Type de démontage: simple"
|
||||||
|
fi
|
||||||
|
|
||||||
|
setx device=findmnt -T "$mountp" -vnlo SOURCE
|
||||||
|
[ -n "$device" ] || die "Impossible de trouver le périphérique correspondant à $mountp"
|
||||||
|
if [ -n "$poweroff" ]; then
|
||||||
|
estepi "Le périphérique $device sera éteint après démontage"
|
||||||
|
else
|
||||||
|
edebug "Le périphérique correspondant est $device"
|
||||||
|
fi
|
||||||
|
|
||||||
|
eend
|
||||||
|
|
||||||
|
ask_yesno -i "Voulez-vous continuer?" O || die
|
||||||
|
|
||||||
function die_maybe() {
|
function die_maybe() {
|
||||||
[ -n "$continuous" ] && return
|
[ -n "$continuous" ] && return
|
||||||
die "$@"
|
die "$@"
|
||||||
}
|
}
|
||||||
|
etitled "Démontage des systèmes de fichier"
|
||||||
|
if [ -n "$recursive" ]; then
|
||||||
|
for mount in "${mounts[@]}"; do
|
||||||
|
estep "$mount"
|
||||||
|
umount "$mount" || die_maybe
|
||||||
|
done
|
||||||
|
else
|
||||||
|
estep "$mountp"
|
||||||
|
umount "$mountp" || die_maybe
|
||||||
|
fi
|
||||||
|
eend
|
||||||
|
|
||||||
setx -a mounts=evalp show_all // sort -u // \
|
if [ -n "$poweroff" ]; then
|
||||||
awk '{print length($0) "," $0}' // \
|
etitle "Arrêt des périphériques"
|
||||||
sort -nr // \
|
estep "$device"
|
||||||
awk '{sub(/[0-9]+,/, ""); print}'
|
udisksctl power-off -b "$device" || die
|
||||||
|
eend
|
||||||
|
|
||||||
for mount in "${mounts[@]}"; do
|
enote "Vous pouvez maintenant débrancher le périphérique!"
|
||||||
estep "$mount"
|
fi
|
||||||
umount "$mount" || die_maybe
|
|
||||||
done
|
exit 0
|
||||||
|
|
Loading…
Reference in New Issue