#!/usr/bin/env bash # # @license Apache-2.0 # # Copyright (c) 2017 The Stdlib Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Download a remote resource. # # Usage: download [output_filepath] # # Arguments: # # url Remote resource. # output_filepath Output filepath. # # VARIABLES # # Set the url: url="$1" # Find a program for downloading a resource: CURL=$(command -v curl 2>/dev/null) WGET=$(command -v wget 2>/dev/null) FETCH=$(command -v fetch 2>/dev/null) # Define a timeout (in seconds): timeout=30 # Define command options: curl_opts="-fkL --connect-timeout ${timeout} -y ${timeout}" wget_opts="--no-check-certificate --tries=1 --timeout=${timeout}" fetch_opts="-T ${timeout}" # FUNCTIONS # # Prints usage information. usage() { echo '' >&2 echo 'Usage: download [output_filepath]' >&2 echo '' >&2 } # MAIN # # Handle arguments... if [[ "$#" -eq 0 ]]; then usage exit 0 elif [[ "$#" -eq 1 ]]; then curl_opts="${curl_opts} -O" elif [[ "$#" -eq 2 ]]; then curl_opts="${curl_opts} -o $2" wget_opts="${wget_opts} -O $2" fetch_opts="${fetch_opts} -o $2" else echo 'ERROR: unrecognized arguments. Must provide a URL and, optionally, an output filepath.' >&2 exit 1 fi # Determine the command for downloading a resource... if [[ -x "${CURL}" ]] && "${CURL}" -V >/dev/null; then get="${CURL}" opts="${curl_opts}" elif [[ -x "${WGET}" ]] && "${WGET}" -V >/dev/null; then get="${WGET}" opts="${wget_opts}" elif [[ -x "${FETCH}" ]]; then get="${FETCH}" opts="${fetch_opts}" else echo 'ERROR: missing dependency. Please download either curl, wget, or fetch. Once installed, run the command again.' >&2 exit 1 fi # Download the resource: eval "${get} ${opts} ${url}"