github.com/afumu/libc@v0.0.6/musl/tools/install.sh (about)

     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