[1046] | 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
|
---|