56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 |