| 1 | 
 #!/bin/sh | 
 
 
 
 
 
 | 2 | 
 # | 
 
 
 
 
 
 | 3 | 
 # File: umount | 
 
 
 
 
 
 | 4 | 
 # $Id: umount,v 1.2 2010/03/24 21:28:30 keithmarshall Exp $ | 
 
 
 
 
 
 | 5 | 
 # | 
 
 
 
 
 
 | 6 | 
 # ===================================================================== | 
 
 
 
 
 
 | 7 | 
 # | 
 
 
 
 
 
 | 8 | 
 # Copyright (C) 2006, 2007, 2009 by Keith Marshall | 
 
 
 
 
 
 | 9 | 
 #  mailto:keithmarshall@users.sourceforge.net | 
 
 
 
 
 
 | 10 | 
 # | 
 
 
 
 
 
 | 11 | 
 # This file is part of MSYS | 
 
 
 
 
 
 | 12 | 
 #  http://www.mingw.org/msys.shtml | 
 
 
 
 
 
 | 13 | 
 # | 
 
 
 
 
 
 | 14 | 
 # 2009-04-06: First published implementation for MSYS-1.0.11 | 
 
 
 
 
 
 | 15 | 
 # | 
 
 
 
 
 
 | 16 | 
 # MSYS is free software.  It is provided "as is", in the hope that it | 
 
 
 
 
 
 | 17 | 
 # may be useful; there is NO WARRANTY OF ANY KIND, not even an implied | 
 
 
 
 
 
 | 18 | 
 # warranty of MERCHANTABILITY or FITNESS FOR ANY PARTICULAR PURPOSE. | 
 
 
 
 
 
 | 19 | 
 # At no time will the author accept liability for damages, however | 
 
 
 
 
 
 | 20 | 
 # caused, resulting from the use of this software. | 
 
 
 
 
 
 | 21 | 
 # | 
 
 
 
 
 
 | 22 | 
 # Permission is granted to copy and redistribute this software, either | 
 
 
 
 
 
 | 23 | 
 # as is, or in modified form, provided that:-- | 
 
 
 
 
 
 | 24 | 
 # | 
 
 
 
 
 
 | 25 | 
 #   1) All such copies are distributed with the same rights | 
 
 
 
 
 
 | 26 | 
 #      of redistribution. | 
 
 
 
 
 
 | 27 | 
 # | 
 
 
 
 
 
 | 28 | 
 #   2) The preceding disclaimer of warranty and liabality is | 
 
 
 
 
 
 | 29 | 
 #      retained verbatim, in all copies. | 
 
 
 
 
 
 | 30 | 
 # | 
 
 
 
 
 
 | 31 | 
 #   3) Accreditation of the original author remains in place. | 
 
 
 
 
 
 | 32 | 
 # | 
 
 
 
 
 
 | 33 | 
 #   4) Modified copies are clearly identified as such, with | 
 
 
 
 
 
 | 34 | 
 #      additional accreditation given to the authors of each | 
 
 
 
 
 
 | 35 | 
 #      modified version. | 
 
 
 
 
 
 | 36 | 
 # | 
 
 
 
 
 
 | 37 | 
 # ===================================================================== | 
 
 
 
 
 
 | 38 | 
 # | 
 
 
 
 
 
 | 39 | 
 # Exactly one argument is required... | 
 
 
 
 
 
 | 40 | 
 # | 
 
 
 
 
 
 | 41 | 
   if test $# -eq 1 | 
 
 
 
 
 
 | 42 | 
   then | 
 
 
 
 
 
 | 43 | 
 # | 
 
 
 
 
 
 | 44 | 
 #   Normally, it specifies the mount point to be released, | 
 
 
 
 
 
 | 45 | 
 #   but it may also represent a mounted directory path name, | 
 
 
 
 
 
 | 46 | 
 #   for which all bound mount points are to be filtered out | 
 
 
 
 
 
 | 47 | 
 #   of the "mount table" file. | 
 
 
 
 
 
 | 48 | 
 # | 
 
 
 
 
 
 | 49 | 
     MNTPATH=`echo "$1" | tr '\\\\' /` | 
 
 
 
 
 
 | 50 | 
     TMPFILE=${TMPDIR-"/tmp"}/mnttab$$.tmp | 
 
 
 
 
 
 | 51 | 
     MNTTAB=${MNTTAB-"/etc/fstab"} | 
 
 
 
 
 
 | 52 | 
 # | 
 
 
 
 
 
 | 53 | 
     if cat "$MNTTAB" | tr '\\' / | awk ' | 
 
 
 
 
 
 | 54 | 
 # | 
 
 
 
 
 
 | 55 | 
 #     Copy the "mount table" to a temporary file, filtering | 
 
 
 
 
 
 | 56 | 
 #     out all active mount point records which match MNTPATH, | 
 
 
 
 
 
 | 57 | 
 #     (the specified argument); set exit status to:-- | 
 
 
 
 
 
 | 58 | 
 #       0: if at least one mount point is matched; | 
 
 
 
 
 
 | 59 | 
 #       1: if no match is found. | 
 
 
 
 
 
 | 60 | 
 # | 
 
 
 
 
 
 | 61 | 
       BEGIN { status = 1 } | 
 
 
 
 
 
 | 62 | 
       { keep = $0 } | 
 
 
 
 
 
 | 63 | 
       /^#/ { print; keep = "no"; $0 = "!'$MNTPATH'" } | 
 
 
 
 
 
 | 64 | 
       $2 == "'$MNTPATH'" { keep = "no"; status = 0 } | 
 
 
 
 
 
 | 65 | 
       { $2 = "!" } $0 == "'$MNTPATH' !" { keep = "no"; status = 0 } | 
 
 
 
 
 
 | 66 | 
       keep != "no" { print keep } | 
 
 
 
 
 
 | 67 | 
       END { exit status }' > "$TMPFILE" | 
 
 
 
 
 
 | 68 | 
     then | 
 
 
 
 
 
 | 69 | 
 # | 
 
 
 
 
 
 | 70 | 
 #     At least one mount point was selected to release... | 
 
 
 
 
 
 | 71 | 
 #     Replace the active "mount table" file with the regenerated | 
 
 
 
 
 
 | 72 | 
 #     copy, so completing the operation. | 
 
 
 
 
 
 | 73 | 
 # | 
 
 
 
 
 
 | 74 | 
       cp "$TMPFILE" "$MNTTAB" | 
 
 
 
 
 
 | 75 | 
       rm -f "$TMPFILE" | 
 
 
 
 
 
 | 76 | 
 # | 
 
 
 
 
 
 | 77 | 
     else | 
 
 
 
 
 
 | 78 | 
 # | 
 
 
 
 
 
 | 79 | 
 #     No active mount point matched the specified argument... | 
 
 
 
 
 
 | 80 | 
 #     Discard the temporary file, complain, and bail out. | 
 
 
 
 
 
 | 81 | 
 # | 
 
 
 
 
 
 | 82 | 
       rm -f "$TMPFILE" | 
 
 
 
 
 
 | 83 | 
       echo >&2 "$0: '$1' is not mounted" | 
 
 
 
 
 
 | 84 | 
       exit 1 | 
 
 
 
 
 
 | 85 | 
     fi | 
 
 
 
 
 
 | 86 | 
 # | 
 
 
 
 
 
 | 87 | 
   else | 
 
 
 
 
 
 | 88 | 
 # | 
 
 
 
 
 
 | 89 | 
 #   The command line did not specify exactly one argument... | 
 
 
 
 
 
 | 90 | 
 #   Complain, and bail out. | 
 
 
 
 
 
 | 91 | 
 # | 
 
 
 
 
 
 | 92 | 
     echo >&2 "$0: incorrect number of arguments" | 
 
 
 
 
 
 | 93 | 
     echo >&2 "usage: umount <path>" | 
 
 
 
 
 
 | 94 | 
     exit 2 | 
 
 
 
 
 
 | 95 | 
   fi | 
 
 
 
 
 
 | 96 | 
 # | 
 
 
 
 
 
 | 97 | 
 # On successful completion, ensure we set the exit status appropriately. | 
 
 
 
 
 
 | 98 | 
 # | 
 
 
 
 
 
 | 99 | 
   exit 0 | 
 
 
 
 
 
 | 100 | 
 # | 
 
 
 
 
 
 | 101 | 
 # $RCSfile: umount,v $: end of file |