From a7ee78fb7f2aefdfa7c280ad4d339aeb9b2a3e10 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 19 Oct 2016 14:58:21 +0400 Subject: [PATCH 1/3] description branche --- TODO.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/TODO.md b/TODO.md index 32dea67..19174f2 100644 --- a/TODO.md +++ b/TODO.md @@ -1,3 +1,12 @@ # 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 + -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary \ No newline at end of file From f34f32a7a3b8eba220b21d3550eee7ce0b4b1e0b Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 10 Jan 2017 16:32:00 +0400 Subject: [PATCH 2/3] support des options --[no-]recursive et --[no-]poweroff --- TODO.md | 7 ---- umountr | 110 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 95 insertions(+), 22 deletions(-) diff --git a/TODO.md b/TODO.md index 19174f2..73e5ba3 100644 --- a/TODO.md +++ b/TODO.md @@ -1,12 +1,5 @@ # 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 -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary \ No newline at end of file diff --git a/umountr b/umountr index 00c5a1a..2c46d8b 100755 --- a/umountr +++ b/umountr @@ -9,19 +9,36 @@ function display_help() { USAGE $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 -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= +recursive=auto +poweroff=auto args=( --help '$exit_with display_help' -c,--continuous continuous=1 + -r,--recursive recursive=1 + -1,--no-recursive recursive= + -o,--poweroff poweroff=1 + -k,--no-poweroff poweroff= ) parse_args "$@"; set -- "${args[@]}" @@ -30,26 +47,89 @@ mountp="$1" [ -d "$mountp" ] || die "$mountp: répertoire introuvable" 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 -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() { findmnt -T "$mountp" -Rnlo TARGET 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() { [ -n "$continuous" ] && return 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 // \ - awk '{print length($0) "," $0}' // \ - sort -nr // \ - awk '{sub(/[0-9]+,/, ""); print}' +if [ -n "$poweroff" ]; then + etitle "Arrêt des périphériques" + estep "$device" + udisksctl power-off -b "$device" || die + eend -for mount in "${mounts[@]}"; do - estep "$mount" - umount "$mount" || die_maybe -done + enote "Vous pouvez maintenant débrancher le périphérique!" +fi + +exit 0 From 83d6db30729b7dbeb7de0ddf9319fbcc12d4c4c2 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Tue, 10 Jan 2017 16:37:41 +0400 Subject: [PATCH 3/3] =?UTF-8?q?auto-compl=C3=A9tion=20pour=20umountr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 2 -- lib/completion.d/nutools | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/TODO.md b/TODO.md index 73e5ba3..32dea67 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,3 @@ # TODO -* 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 \ No newline at end of file diff --git a/lib/completion.d/nutools b/lib/completion.d/nutools index 79494ac..527d07d 100644 --- a/lib/completion.d/nutools +++ b/lib/completion.d/nutools @@ -13,3 +13,7 @@ if __bash_completion_module_enabled ssh; then shopt -u hostcomplete complete -F _ssh ussh cssh fi + +if __bash_completion_module_enabled umount; then + complete -F _umount -o dirnames umountr +fi