lib/scripts/download_file
author wenzelm
Tue, 29 Aug 2023 17:29:34 +0200
changeset 78610 fd1fec53665b
parent 77053 c839b84ee66f
child 80213 d13b8ee54885
permissions -rw-r--r--
clarified signature: prefer enum types;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
77053
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     1
# -*- shell-script -*- :mode=shellscript:
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     2
#
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     3
# Bash function to download file via "curl".
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     4
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     5
function download_file ()
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     6
{
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     7
  [ "$#" -ne 2 ] && {
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     8
    echo "Bad arguments for download_file" >&2
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
     9
    return 2
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    10
  }
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    11
  local REMOTE="$1"
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    12
  local LOCAL="$2"
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    13
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    14
  type -p curl > /dev/null || {
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    15
    echo "Require \"curl\" to download files" >&2
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    16
    return 2
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    17
  }
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    18
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    19
  local CURL_OPTIONS="--fail --silent --location"
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    20
  if [ "$(uname -s)" = "Darwin" ]
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    21
  then
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    22
    case $(sw_vers -productVersion) in
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    23
      10.*)
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    24
        CURL_OPTIONS="$CURL_OPTIONS --insecure"
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    25
        ;;
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    26
    esac
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    27
  fi
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    28
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    29
  echo "Getting \"$REMOTE\""
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    30
  mkdir -p "$(dirname "$LOCAL")"
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    31
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    32
  if curl $CURL_OPTIONS "$REMOTE" > "${LOCAL}.part"
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    33
  then
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    34
    mv -f "${LOCAL}.part" "$LOCAL"
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    35
  else
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    36
    rm -f "${LOCAL}.part"
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    37
    echo "Failed to download \"$REMOTE\"" >&2
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    38
    return 2
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    39
  fi
c839b84ee66f more modular shell script;
wenzelm
parents:
diff changeset
    40
}