OLD | NEW |
| (Empty) |
1 #!/bin/sh | |
2 # | |
3 # This is an actually-safe install command which installs the new | |
4 # file atomically in the new location, rather than overwriting | |
5 # existing files. | |
6 # | |
7 | |
8 usage() { | |
9 printf "usage: %s [-D] [-l] [-m mode] src dest\n" "$0" 1>&2 | |
10 exit 1 | |
11 } | |
12 | |
13 mkdirp= | |
14 symlink= | |
15 mode=755 | |
16 | |
17 while getopts Dlm: name ; do | |
18 case "$name" in | |
19 D) mkdirp=yes ;; | |
20 l) symlink=yes ;; | |
21 m) mode=$OPTARG ;; | |
22 ?) usage ;; | |
23 esac | |
24 done | |
25 shift $(($OPTIND - 1)) | |
26 | |
27 test "$#" -eq 2 || usage | |
28 src=$1 | |
29 dst=$2 | |
30 tmp="$dst.tmp.$$" | |
31 | |
32 case "$dst" in | |
33 */) printf "%s: %s ends in /\n", "$0" "$dst" 1>&2 ; exit 1 ;; | |
34 esac | |
35 | |
36 set -C | |
37 set -e | |
38 | |
39 if test "$mkdirp" ; then | |
40 umask 022 | |
41 case "$2" in | |
42 */*) mkdir -p "${dst%/*}" ;; | |
43 esac | |
44 fi | |
45 | |
46 trap 'rm -f "$tmp"' EXIT INT QUIT TERM HUP | |
47 | |
48 umask 077 | |
49 | |
50 if test "$symlink" ; then | |
51 ln -s "$1" "$tmp" | |
52 else | |
53 cat < "$1" > "$tmp" | |
54 chmod "$mode" "$tmp" | |
55 fi | |
56 | |
57 mv -f "$tmp" "$2" | |
58 test -d "$2" && { | |
59 rm -f "$2/$tmp" | |
60 printf "%s: %s is a directory\n" "$0" "$dst" 1>&2 | |
61 exit 1 | |
62 } | |
63 | |
64 exit 0 | |
OLD | NEW |