summaryrefslogtreecommitdiff
path: root/remove-shell
diff options
context:
space:
mode:
authorClint Adams <schizo@debian.org>2007-11-12 11:16:06 -0500
committerClint Adams <schizo@debian.org>2007-11-12 11:16:06 -0500
commitaa2159e1a3eeb0c82bee22c54a8739d578639761 (patch)
treebbe91d547c94dcd209ebcc79f879b7496f9e699f /remove-shell
parentc2a1c435ef5e7d590328802ce333de410ce40cb6 (diff)
downloaddebianutils-aa2159e1a3eeb0c82bee22c54a8739d578639761.tar.gz
import all changes from the bzr branch as a single changeset
Diffstat (limited to 'remove-shell')
-rwxr-xr-xremove-shell40
1 files changed, 40 insertions, 0 deletions
diff --git a/remove-shell b/remove-shell
new file mode 100755
index 0000000..1e6b739
--- /dev/null
+++ b/remove-shell
@@ -0,0 +1,40 @@
+#!/bin/sh -e
+
+if test $# -eq 0
+then
+ echo usage: $0 shellname '[shellname ...]' 1>&2
+ exit 1
+fi
+
+file=/etc/shells
+# I want this to be GUARANTEED to be on the same filesystem as $file
+tmpfile=${file}.tmp
+otmpfile=${file}.tmp2
+
+set -o noclobber
+
+trap "rm -f $tmpfile $otmpfile" EXIT
+
+if ! cat $file > $tmpfile
+then
+ cat 1>&2 <<EOF
+Either another instance of $0 is running, or it was previously interrupted.
+Please examine ${tmpfile} to see if it should be moved onto ${file}.
+EOF
+ exit 1
+fi
+
+# this is supposed to be reliable, not pretty
+for i
+do
+ grep -v "^${i}$" $tmpfile > $otmpfile || true
+ mv $otmpfile $tmpfile
+done
+
+chmod --reference=$file $tmpfile
+chown --reference=$file $tmpfile
+
+mv $tmpfile $file
+
+trap "" EXIT
+exit 0