1e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li#!/bin/sh 2e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# 3e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# install - install a program, script, or datafile 4e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# This comes from X11R5 (mit/util/scripts/install.sh). 5e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# 6e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Copyright 1991 by the Massachusetts Institute of Technology 7e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# 8e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Permission to use, copy, modify, distribute, and sell this software and its 9e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# documentation for any purpose is hereby granted without fee, provided that 10e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# the above copyright notice appear in all copies and that both that 11e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# copyright notice and this permission notice appear in supporting 12e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# documentation, and that the name of M.I.T. not be used in advertising or 13e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# publicity pertaining to distribution of the software without specific, 14e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# written prior permission. M.I.T. makes no representations about the 15e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# suitability of this software for any purpose. It is provided "as is" 16e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# without express or implied warranty. 17e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# 18e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Calling this script install-sh is preferred over install.sh, to prevent 19e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# `make' implicit rules from creating a file called install from it 20e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# when there is no Makefile. 21e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# 22e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# This script is compatible with the BSD install script, but was written 23e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# from scratch. It can only install one file at a time, a restriction 24e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# shared with many OS's install programs. 25e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 26e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 27e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# set DOITPROG to echo to test this script 28e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 29e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Don't use :- since 4.3BSD and earlier shells don't like it. 30e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lidoit="${DOITPROG-}" 31e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 32e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 33e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# put in absolute paths if you don't have them in your path; or use env. vars. 34e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 35e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Limvprog="${MVPROG-mv}" 36e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Licpprog="${CPPROG-cp}" 37e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lichmodprog="${CHMODPROG-chmod}" 38e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lichownprog="${CHOWNPROG-chown}" 39e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lichgrpprog="${CHGRPPROG-chgrp}" 40e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Listripprog="${STRIPPROG-strip}" 41e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lirmprog="${RMPROG-rm}" 42e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Limkdirprog="${MKDIRPROG-mkdir}" 43e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 44e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Litransformbasename="" 45e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Litransform_arg="" 46e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liinstcmd="$mvprog" 47e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lichmodcmd="$chmodprog 0755" 48e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lichowncmd="" 49e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lichgrpcmd="" 50e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Listripcmd="" 51e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lirmcmd="$rmprog -f" 52e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Limvcmd="$mvprog" 53e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lisrc="" 54e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lidst="" 55e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lidir_arg="" 56e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 57e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liwhile [ x"$1" != x ]; do 58e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li case $1 in 59e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li -c) instcmd="$cpprog" 60e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 61e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 62e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 63e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li -d) dir_arg=true 64e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 65e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 66e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 67e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li -m) chmodcmd="$chmodprog $2" 68e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 69e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 70e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 71e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 72e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li -o) chowncmd="$chownprog $2" 73e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 74e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 75e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 76e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 77e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li -g) chgrpcmd="$chgrpprog $2" 78e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 79e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 80e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 81e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 82e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li -s) stripcmd="$stripprog" 83e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 84e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 85e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 86e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li -t=*) transformarg=`echo $1 | sed 's/-t=//'` 87e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 88e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 89e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 90e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 91e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 92e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 93e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 94e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li *) if [ x"$src" = x ] 95e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li then 96e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li src=$1 97e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li else 98e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li # this colon is to work around a 386BSD /bin/sh bug 99e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li : 100e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li dst=$1 101e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li fi 102e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 103e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li continue;; 104e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li esac 105e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lidone 106e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 107e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liif [ x"$src" = x ] 108e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lithen 109e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li echo "install: no input file specified" 110e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li exit 1 111e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lielse 112e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li true 113e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lifi 114e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 115e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liif [ x"$dir_arg" != x ]; then 116e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li dst=$src 117e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li src="" 118e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 119e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ -d $dst ]; then 120e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li instcmd=: 121e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li chmodcmd="" 122e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li else 123e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li instcmd=mkdir 124e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li fi 125e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lielse 126e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 127e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 128e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# might cause directories to be created, which would be especially bad 129e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# if $src (and thus $dsttmp) contains '*'. 130e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 131e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ -f $src -o -d $src ] 132e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li then 133e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li true 134e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li else 135e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li echo "install: $src does not exist" 136e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li exit 1 137e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li fi 138e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 139e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$dst" = x ] 140e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li then 141e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li echo "install: no destination specified" 142e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li exit 1 143e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li else 144e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li true 145e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li fi 146e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 147e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# If destination is a directory, append the input filename; if your system 148e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# does not like double slashes in filenames, you may need to add some logic 149e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 150e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ -d $dst ] 151e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li then 152e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li dst="$dst"/`basename $src` 153e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li else 154e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li true 155e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li fi 156e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lifi 157e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 158e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li## this sed command emulates the dirname command 159e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lidstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 160e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 161e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Make sure that the destination directory exists. 162e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# this part is taken from Noah Friedman's mkinstalldirs script 163e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 164e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Skip lots of stat calls in the usual case. 165e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liif [ ! -d "$dstdir" ]; then 166e54acca48ba1ab84ac7c693de45ed31ac3f311c2David LidefaultIFS=' 167e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li' 168e54acca48ba1ab84ac7c693de45ed31ac3f311c2David LiIFS="${IFS-${defaultIFS}}" 169e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 170e54acca48ba1ab84ac7c693de45ed31ac3f311c2David LioIFS="${IFS}" 171e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Some sh's can't handle IFS=/ for some reason. 172e54acca48ba1ab84ac7c693de45ed31ac3f311c2David LiIFS='%' 173e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 174e54acca48ba1ab84ac7c693de45ed31ac3f311c2David LiIFS="${oIFS}" 175e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 176e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lipathcomp='' 177e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 178e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liwhile [ $# -ne 0 ] ; do 179e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li pathcomp="${pathcomp}${1}" 180e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li shift 181e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 182e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ ! -d "${pathcomp}" ] ; 183e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li then 184e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li $mkdirprog "${pathcomp}" 185e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li else 186e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li true 187e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li fi 188e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 189e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li pathcomp="${pathcomp}/" 190e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lidone 191e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lifi 192e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 193e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liif [ x"$dir_arg" != x ] 194e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lithen 195e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li $doit $instcmd $dst && 196e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 197e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 198e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 199e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 200e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 201e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lielse 202e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 203e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# If we're going to rename the final executable, determine the name now. 204e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 205e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$transformarg" = x ] 206e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li then 207e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li dstfile=`basename $dst` 208e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li else 209e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li dstfile=`basename $dst $transformbasename | 210e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li sed $transformarg`$transformbasename 211e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li fi 212e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 213e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# don't allow the sed command to completely eliminate the filename 214e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 215e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$dstfile" = x ] 216e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li then 217e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li dstfile=`basename $dst` 218e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li else 219e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li true 220e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li fi 221e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 222e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Make a temp file name in the proper directory. 223e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 224e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li dsttmp=$dstdir/#inst.$$# 225e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 226e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Move or copy the file name to the temp name 227e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 228e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li $doit $instcmd $src $dsttmp && 229e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 230e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li trap "rm -f ${dsttmp}" 0 && 231e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 232e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# and set any options; do chmod last to preserve setuid bits 233e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 234e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# If any of these fail, we abort the whole thing. If we want to 235e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# ignore errors from any of these, just make sure not to ignore 236e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# errors from the above "$doit $instcmd $src $dsttmp" command. 237e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 238e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 239e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 240e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 241e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 242e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 243e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li# Now rename the file to the real destination. 244e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 245e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li $doit $rmcmd -f $dstdir/$dstfile && 246e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li $doit $mvcmd $dsttmp $dstdir/$dstfile 247e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 248e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Lifi && 249e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 250e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Li 251e54acca48ba1ab84ac7c693de45ed31ac3f311c2David Liexit 0 252