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