#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS function display_help() { uecho "$scriptname: démonter un système de fichier récursivement 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" } continuous= args=( --help '$exit_with display_help' -c,--continuous continuous=1 ) parse_args "$@"; set -- "${args[@]}" mountp="$1" [ -n "$mountp" ] || die "Vous dévez spécifier le système de fichier à démonter" [ -d "$mountp" ] || die "$mountp: répertoire introuvable" setx mountp=abspath "$mountp" run_as_root ${continuous:+-c} "$@" setx -a mountps=findmnt -nlo TARGET array_contains mountps "$mountp" || die "Vous devez spécifier un répertoire de montage valide" function show_all() { findmnt -T "$mountp" -Rnlo TARGET findmnt -nlo TARGET | awkrun mountp="$mountp" '{ if (substr($0, 1, length(mountp) + 1) == (mountp "/")) print }' } function die_maybe() { [ -n "$continuous" ] && return die "$@" } setx -a mounts=evalp show_all // sort -u // \ awk '{print length($0) "," $0}' // \ sort -nr // \ awk '{sub(/[0-9]+,/, ""); print}' for mount in "${mounts[@]}"; do estep "$mount" umount "$mount" || die_maybe done