-mt -f $TAPE_FILE rewind
-rm $VOLNO_FILE
-
-set $BACKUP_DIRS
-while [ $# -ne 0 ] ; do
- host=`echo $1 | sed 's/:.*$//'`
- fs=`echo $1 | sed 's/^.*://'`
- date=`date`
- fsname=`echo $1 | sed 's/\//:/g'`
-
-# This filename must be absolute; it is opened on the machine that runs tar.
- TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
- TAR_PART3="--label='level 1 backup of $fs on $host at $date' -C $fs ."
-
- echo Backing up $1 at $date | tee -a $LOGFILE
- echo Last full dump on this filesystem: | tee -a $LOGFILE
-
- if [ $HOST != $host ] ; then
- rsh $host "ls -l /etc/tar-backup/$fsname.level-0; \
- cp /etc/tar-backup/$fsname.level-0 /etc/tar-backup/temp.level-1" \
- 2>&1 | tee -a $LOGFILE
- else
- ls -l /etc/tar-backup/$fsname.level-0 2>&1 | tee -a $LOGFILE
- cp /etc/tar-backup/$fsname.level-0 /etc/tar-backup/temp.level-1 2>&1 | tee -a $LOGFILE
- fi
-
- # Actually back things up.
-
- if [ $HOST != $host ] ; then
- rsh $host $TAR_PART1 -f $HOST:$TAPE_FILE $TAR_PART2 $TAR_PART3 2>&1 | tee -a $LOGFILE
- else
-# Using `sh -c exec' causes nested quoting and shell substitution
-# to be handled here in the same way rsh handles it.
- sh -c "exec $TAR_PART1 -f $TAPE_FILE $TAR_PART2 $TAR_PART3" 2>&1 | tee -a $LOGFILE
- fi
- if [ $? -ne 0 ] ; then
- echo Backup of $1 failed. | tee -a $LOGFILE
+# Most everything below here is run in a subshell for which all output is
+# piped through `tee' to the logfile. Doing this, instead of having
+# multiple pipelines all over the place, is cleaner and allows access to
+# the exit value from various commands more easily.
+(
+ # Caveat: Some version of `mt' require `-t', not `-f'.
+ mt -f "${TAPE_FILE}" rewind
+ rm -f "${VOLNO_FILE}"
+
+ set - ${BACKUP_DIRS}
+ while [ $# -ne 0 ] ; do
+ date="`date`"
+ remotehost="`echo \"${1}\" | sed -e 's/:.*$//'`"
+ fs="`echo \"${1}\" | sed -e 's/^.*://'`"
+ fsname="`echo \"${1}\" | sed -e 's/\//:/g'`"
+
+ # This filename must be absolute; it is opened on the machine that runs tar.
+ TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
+ TAR_PART3="--label='level 1 backup of ${fs} on ${remotehost} at ${date}' -C ${fs} ."
+
+ echo "Backing up ${1} at ${date}"
+ echo "Last full dump on this filesystem:"
+
+ if [ "z${remotehost}" != "z${localhost}" ] ; then
+ rsh "${remotehost}" "ls -l /etc/tar-backup/${fsname}.level-0; \
+ cp /etc/tar-backup/${fsname}.level-0 /etc/tar-backup/temp.level-1"
+ else
+ ls -l "/etc/tar-backup/${fsname}.level-0"
+ cp "/etc/tar-backup/${fsname}.level-0" /etc/tar-backup/temp.level-1
+ fi
+
+ # Actually back things up.
+
+ if [ "z${remotehost}" != "z${localhost}" ] ; then
+ rsh "${remotehost}" ${TAR_PART1} -f "${localhost}:${TAPE_FILE}" ${TAR_PART2} ${TAR_PART3}
+ else
+ # Using `sh -c exec' causes nested quoting and shell substitution
+ # to be handled here in the same way rsh handles it.
+ sh -c "exec ${TAR_PART1} -f \"${TAPE_FILE}\" ${TAR_PART2} ${TAR_PART3}"
+ fi
+
+ # `rsh' doesn't exit with the exit status of the remote command. What
+ # stupid lossage. TODO: think of a reliable workaround.
+ if [ $? -ne 0 ] ; then
+ echo "Backup of ${1} failed."
+ # I'm assuming that the tar will have written an empty
+ # file to the tape, otherwise I should do a cat here.
+ else
+ if [ "z${localhost}" != "z${remotehost}" ] ; then
+ rsh "${remotehost}" mv -f /etc/tar-backup/temp.level-1 "/etc/tar-backup/${fsname}.level-1"
+ else
+ mv -f /etc/tar-backup/temp.level-1 "/etc/tar-backup/${fsname}.level-1"
+ fi
+ fi
+ ${TAPE_STATUS}
+ sleep 60
+ shift
+ done
+
+ # Dump any individual files requested.
+
+ if [ "x${BACKUP_FILES}" != "x" ] ; then
+ date="`date`"
+ TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
+ TAR_PART3="--label='Incremental backup of miscellaneous files at ${date}'"
+
+ echo "Backing up miscellaneous files at ${date}"
+ echo "Last full dump of these files:"
+ ls -l /etc/tar-backup/misc.level-0
+
+ rm -f /etc/tar-backup/temp.level-1
+ cp /etc/tar-backup/misc.level-0 /etc/tar-backup/temp.level-1
+
+ # Using `sh -c exec' causes nested quoting and shell substitution
+ # to be handled here in the same way rsh handles it.
+ sh -c "exec ${TAR_PART1} -f \"${TAPE_FILE}\" ${TAR_PART2} ${TAR_PART3} ${BACKUP_FILES}"
+
+ if [ $? -ne 0 ] ; then
+ echo "Backup of miscellaneous files failed." 1>&2