mirror of
https://github.com/tcsenpai/UWINE.git
synced 2025-06-18 17:30:01 +00:00
48 lines
915 B
Bash
Executable File
48 lines
915 B
Bash
Executable File
#!/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 <<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
|
|
|
|
for i
|
|
do
|
|
REALDIR="$(dirname "$(realpath -m "$i")")/$(basename "$i")"
|
|
for j in "$i" "$REALDIR"
|
|
do
|
|
if ! grep -q "^${j}$" "$tmpfile"
|
|
then
|
|
echo "$j" >> "$tmpfile"
|
|
fi
|
|
done
|
|
done
|
|
|
|
chmod --reference="$file" "$tmpfile"
|
|
chown --reference="$file" "$tmpfile"
|
|
|
|
mv "$tmpfile" "$file"
|
|
|
|
trap "" EXIT
|
|
exit 0
|