14d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima#!/bin/sh 24d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# 34d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# install - install a program, script, or datafile 44d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# This comes from X11R5 (mit/util/scripts/install.sh). 54d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# 64d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Copyright 1991 by the Massachusetts Institute of Technology 74d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# 84d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Permission to use, copy, modify, distribute, and sell this software and its 94d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# documentation for any purpose is hereby granted without fee, provided that 104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# the above copyright notice appear in all copies and that both that 114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# copyright notice and this permission notice appear in supporting 124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# documentation, and that the name of M.I.T. not be used in advertising or 134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# publicity pertaining to distribution of the software without specific, 144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# written prior permission. M.I.T. makes no representations about the 154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# suitability of this software for any purpose. It is provided "as is" 164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# without express or implied warranty. 174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# 184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Calling this script install-sh is preferred over install.sh, to prevent 194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# `make' implicit rules from creating a file called install from it 204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# when there is no Makefile. 214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# 224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# This script is compatible with the BSD install script, but was written 234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# from scratch. It can only install one file at a time, a restriction 244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# shared with many OS's install programs. 254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# set DOITPROG to echo to test this script 284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Don't use :- since 4.3BSD and earlier shells don't like it. 304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimadoit="${DOITPROG-}" 314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# put in absolute paths if you don't have them in your path; or use env. vars. 344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimamvprog="${MVPROG-mv}" 364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimacpprog="${CPPROG-cp}" 374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimachmodprog="${CHMODPROG-chmod}" 384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimachownprog="${CHOWNPROG-chown}" 394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimachgrpprog="${CHGRPPROG-chgrp}" 404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimastripprog="${STRIPPROG-strip}" 414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimarmprog="${RMPROG-rm}" 424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimamkdirprog="${MKDIRPROG-mkdir}" 434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatransformbasename="" 454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimatransform_arg="" 464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimainstcmd="$mvprog" 474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimachmodcmd="$chmodprog 0755" 484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimachowncmd="" 494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimachgrpcmd="" 504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimastripcmd="" 514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimarmcmd="$rmprog -f" 524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimamvcmd="$mvprog" 534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimasrc="" 544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimadst="" 554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimadir_arg="" 564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimawhile [ x"$1" != x ]; do 584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima case $1 in 594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima -c) instcmd="$cpprog" 604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima -d) dir_arg=true 644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 664d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima -m) chmodcmd="$chmodprog $2" 684d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 704d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 724d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima -o) chowncmd="$chownprog $2" 734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 744d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima -g) chgrpcmd="$chgrpprog $2" 784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima -s) stripcmd="$stripprog" 834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima -t=*) transformarg=`echo $1 | sed 's/-t=//'` 874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima *) if [ x"$src" = x ] 954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima then 964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima src=$1 974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima # this colon is to work around a 386BSD /bin/sh bug 994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima : 1004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dst=$1 1014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima fi 1024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 1034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima continue;; 1044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima esac 1054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimadone 1064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaif [ x"$src" = x ] 1084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimathen 1094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima echo "install: no input file specified" 1104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima exit 1 1114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaelse 1124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima true 1134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimafi 1144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaif [ x"$dir_arg" != x ]; then 1164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dst=$src 1174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima src="" 1184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ -d $dst ]; then 1204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima instcmd=: 1214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima chmodcmd="" 1224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima instcmd=mkdir 1244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima fi 1254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaelse 1264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 1284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# might cause directories to be created, which would be especially bad 1294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# if $src (and thus $dsttmp) contains '*'. 1304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ -f $src -o -d $src ] 1324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima then 1334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima true 1344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima echo "install: $src does not exist" 1364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima exit 1 1374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima fi 1384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$dst" = x ] 1404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima then 1414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima echo "install: no destination specified" 1424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima exit 1 1434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima true 1454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima fi 1464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# If destination is a directory, append the input filename; if your system 1484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# does not like double slashes in filenames, you may need to add some logic 1494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ -d $dst ] 1514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima then 1524d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dst="$dst"/`basename $src` 1534d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1544d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima true 1554d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima fi 1564d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimafi 1574d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1584d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima## this sed command emulates the dirname command 1594d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimadstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 1604d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1614d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Make sure that the destination directory exists. 1624d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# this part is taken from Noah Friedman's mkinstalldirs script 1634d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1644d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Skip lots of stat calls in the usual case. 1654d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaif [ ! -d "$dstdir" ]; then 1664d07f569799aaae0d7fccf8e76386d450664987fJun NakajimadefaultIFS=' 1674d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima' 1684d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaIFS="${IFS-${defaultIFS}}" 1694d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1704d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaoIFS="${IFS}" 1714d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Some sh's can't handle IFS=/ for some reason. 1724d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaIFS='%' 1734d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaset - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 1744d07f569799aaae0d7fccf8e76386d450664987fJun NakajimaIFS="${oIFS}" 1754d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1764d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimapathcomp='' 1774d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1784d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimawhile [ $# -ne 0 ] ; do 1794d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pathcomp="${pathcomp}${1}" 1804d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima shift 1814d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1824d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ ! -d "${pathcomp}" ] ; 1834d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima then 1844d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima $mkdirprog "${pathcomp}" 1854d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 1864d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima true 1874d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima fi 1884d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1894d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima pathcomp="${pathcomp}/" 1904d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimadone 1914d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimafi 1924d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1934d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaif [ x"$dir_arg" != x ] 1944d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimathen 1954d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima $doit $instcmd $dst && 1964d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 1974d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 1984d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 1994d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 2004d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 2014d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaelse 2024d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2034d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# If we're going to rename the final executable, determine the name now. 2044d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2054d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$transformarg" = x ] 2064d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima then 2074d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dstfile=`basename $dst` 2084d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 2094d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dstfile=`basename $dst $transformbasename | 2104d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima sed $transformarg`$transformbasename 2114d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima fi 2124d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2134d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# don't allow the sed command to completely eliminate the filename 2144d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2154d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$dstfile" = x ] 2164d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima then 2174d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dstfile=`basename $dst` 2184d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima else 2194d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima true 2204d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima fi 2214d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2224d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Make a temp file name in the proper directory. 2234d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2244d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima dsttmp=$dstdir/#inst.$$# 2254d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2264d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Move or copy the file name to the temp name 2274d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2284d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima $doit $instcmd $src $dsttmp && 2294d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2304d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima trap "rm -f ${dsttmp}" 0 && 2314d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2324d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# and set any options; do chmod last to preserve setuid bits 2334d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2344d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# If any of these fail, we abort the whole thing. If we want to 2354d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# ignore errors from any of these, just make sure not to ignore 2364d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# errors from the above "$doit $instcmd $src $dsttmp" command. 2374d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2384d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 2394d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 2404d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 2414d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 2424d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2434d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima# Now rename the file to the real destination. 2444d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2454d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima $doit $rmcmd -f $dstdir/$dstfile && 2464d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima $doit $mvcmd $dsttmp $dstdir/$dstfile 2474d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2484d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimafi && 2494d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2504d07f569799aaae0d7fccf8e76386d450664987fJun Nakajima 2514d07f569799aaae0d7fccf8e76386d450664987fJun Nakajimaexit 0 252