15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/bin/sh 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# install - install a program, script, or datafile 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This comes from X11R5 (mit/util/scripts/install.sh). 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 1991 by the Massachusetts Institute of Technology 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Permission to use, copy, modify, distribute, and sell this software and its 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# documentation for any purpose is hereby granted without fee, provided that 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# the above copyright notice appear in all copies and that both that 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# copyright notice and this permission notice appear in supporting 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# documentation, and that the name of M.I.T. not be used in advertising or 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# publicity pertaining to distribution of the software without specific, 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# written prior permission. M.I.T. makes no representations about the 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# suitability of this software for any purpose. It is provided "as is" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# without express or implied warranty. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Calling this script install-sh is preferred over install.sh, to prevent 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# `make' implicit rules from creating a file called install from it 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# when there is no Makefile. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# This script is compatible with the BSD install script, but was written 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# from scratch. It can only install one file at a time, a restriction 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# shared with many OS's install programs. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# set DOITPROG to echo to test this script 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Don't use :- since 4.3BSD and earlier shells don't like it. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)doit="${DOITPROG-}" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# put in absolute paths if you don't have them in your path; or use env. vars. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)mvprog="${MVPROG-mv}" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cpprog="${CPPROG-cp}" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chmodprog="${CHMODPROG-chmod}" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chownprog="${CHOWNPROG-chown}" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chgrpprog="${CHGRPPROG-chgrp}" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)stripprog="${STRIPPROG-strip}" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)rmprog="${RMPROG-rm}" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)mkdirprog="${MKDIRPROG-mkdir}" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)transformbasename="" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)transform_arg="" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)instcmd="$mvprog" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chmodcmd="$chmodprog 0755" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chowncmd="" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)chgrpcmd="" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)stripcmd="" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)rmcmd="$rmprog -f" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)mvcmd="$mvprog" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)src="" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dst="" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dir_arg="" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)while [ x"$1" != x ]; do 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case $1 in 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -c) instcmd="$cpprog" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -d) dir_arg=true 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -m) chmodcmd="$chmodprog $2" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -o) chowncmd="$chownprog $2" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -g) chgrpcmd="$chgrpprog $2" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -s) stripcmd="$stripprog" 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -t=*) transformarg=`echo $1 | sed 's/-t=//'` 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *) if [ x"$src" = x ] 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) src=$1 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # this colon is to work around a 386BSD /bin/sh bug 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dst=$1 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue;; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) esac 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)done 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if [ x"$src" = x ] 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)then 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "install: no input file specified" 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 1 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if [ x"$dir_arg" != x ]; then 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dst=$src 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) src="" 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ -d $dst ]; then 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instcmd=: 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chmodcmd="" 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instcmd=mkdir 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# might cause directories to be created, which would be especially bad 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# if $src (and thus $dsttmp) contains '*'. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ -f $src -o -d $src ] 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "install: $src does not exist" 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 1 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$dst" = x ] 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) echo "install: no destination specified" 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exit 1 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If destination is a directory, append the input filename; if your system 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# does not like double slashes in filenames, you may need to add some logic 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ -d $dst ] 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dst="$dst"/`basename $src` 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)## this sed command emulates the dirname command 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Make sure that the destination directory exists. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# this part is taken from Noah Friedman's mkinstalldirs script 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Skip lots of stat calls in the usual case. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if [ ! -d "$dstdir" ]; then 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)defaultIFS=' 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)' 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IFS="${IFS-${defaultIFS}}" 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)oIFS="${IFS}" 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Some sh's can't handle IFS=/ for some reason. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IFS='%' 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IFS="${oIFS}" 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)pathcomp='' 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)while [ $# -ne 0 ] ; do 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pathcomp="${pathcomp}${1}" 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shift 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ ! -d "${pathcomp}" ] ; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $mkdirprog "${pathcomp}" 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pathcomp="${pathcomp}/" 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)done 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if [ x"$dir_arg" != x ] 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)then 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $doit $instcmd $dst && 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)else 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If we're going to rename the final executable, determine the name now. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$transformarg" = x ] 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dstfile=`basename $dst` 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dstfile=`basename $dst $transformbasename | 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sed $transformarg`$transformbasename 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# don't allow the sed command to completely eliminate the filename 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$dstfile" = x ] 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) then 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dstfile=`basename $dst` 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fi 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Make a temp file name in the proper directory. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dsttmp=$dstdir/#inst.$$# 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Move or copy the file name to the temp name 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $doit $instcmd $src $dsttmp && 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trap "rm -f ${dsttmp}" 0 && 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# and set any options; do chmod last to preserve setuid bits 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# If any of these fail, we abort the whole thing. If we want to 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# ignore errors from any of these, just make sure not to ignore 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# errors from the above "$doit $instcmd $src $dsttmp" command. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Now rename the file to the real destination. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $doit $rmcmd -f $dstdir/$dstfile && 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $doit $mvcmd $dsttmp $dstdir/$dstfile 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)fi && 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)exit 0 252