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
|
---|