Edit: /usr/sbin/add-shell (1051B)
#!/bin/sh -e
if test $# -eq 0
then
echo "usage: $0 shellname [shellname ...]"
exit 1
fi
file=/etc/shells
# I want this to be GUARANTEED to be on the same filesystem as $file
tmpfile="${file}.tmp"
set -o noclobber
cleanup() {
rm -f "$tmpfile"
}
trap cleanup EXIT
if ! awk '{print}' "$file" > "$tmpfile"
then
cat 1>&2 <
> "$tmpfile"
fi
done
done
chmod --reference="${file}" "${tmpfile}" || chmod $(stat -c %a "${file}") "${tmpfile}"
chown --reference="${file}" "${tmpfile}" || chown $(stat -c %U "${file}") "${tmpfile}"
mv -Z "${tmpfile}" "${file}" || mv "${tmpfile}" "${file}"
trap "" EXIT
exit 0