| #!/system/bin/sh |
| # wget-curl, a curl wrapper acting as a wget drop-in replacement - version git-HEAD |
| # Usage: wget [wget args] [i need to fill this in later] <url(s)> |
| # Download all URLs given using curl, but using wget's options. |
| # |
| # |
| # End of help. |
| # Copyright (c) 2015 Kylie McClain <somasis@exherbo.org> |
| # |
| # Permission to use, copy, modify, and/or distribute this software for any |
| # purpose with or without fee is hereby granted, provided that the above |
| # copyright notice and this permission notice appear in all copies. |
| # |
| # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
| # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
| # AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, |
| # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
| # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| # OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| # PERFORMANCE OF THIS SOFTWARE. |
| # |
| # End of copyright. |
| # |
| |
| set -o pipefail |
| shopt -u shift_verbose >/dev/null 2>&1 |
| |
| help() { |
| sed -n '/^#/!d;s/^# //;s/^#//;3,${p;}' "$0" | \ |
| while IFS= read help_line;do |
| if [[ "$help_line" == "End of help." ]];then |
| exit 0 |
| else |
| printf "%s\n" "$help_line" |
| fi |
| done |
| exit 0 |
| } |
| |
| version() { |
| sed 's/^# //;s/, .* - version / /;2q;$!d' "$0" |
| copyright |
| exit 0 |
| } |
| |
| copyright() { |
| sed -n '/^#/!d;s/^# //;s/^#//;/End of help./,${p;}' "$0" | \ |
| while IFS= read copyright_line;do |
| if [[ "$copyright_line" == "End of help." ]];then |
| true |
| elif [[ "$copyright_line" == "End of copyright." ]];then |
| break |
| else |
| printf '%s\n' "$copyright_line" |
| fi |
| done |
| } |
| |
| stderr() { |
| printf "$@" >&2 |
| } |
| |
| error() { |
| stderr "$0: $1\n" |
| exit "$2" |
| } |
| |
| invalid_arg() { |
| error "invalid option -- '$1'" 2 |
| } |
| |
| append_opt() { |
| for opt in $@;do |
| CURL_OPTS="${CURL_OPTS} ${opt}" |
| done |
| } |
| |
| curl() { |
| eval "command curl $@ ${CURL_RAW}" |
| } |
| |
| append_raw_arg() { |
| CURL_RAW="$CURL_RAW $@" |
| } |
| |
| has_opt() { # exit 0 if CURL_OPTS has arg, non-zero if doesn't |
| if [[ "$CURL_OPTS" == *" $1"* ]];then |
| return 0 |
| else |
| return 1 |
| fi |
| } |
| |
| reexec_without() { # download afterwards without $1 in OPTS |
| reexec_args_without="$reexec_args_without $@" |
| reexec=1 |
| } |
| |
| reexec_only() { |
| for arg in $@;do |
| CURL_OPTS_REEXEC_ONLY="${CURL_OPTS_REEXEC_ONLY} $arg" |
| done |
| } |
| |
| print_url() { |
| has_opt -s || printf "%s\n" "$1" |
| } |
| |
| # 46ABDFHIKLNOPQRSTUVXabcdhiklm nH nc nd np nv opqrtvwx |
| while getopts ':46ABDFHIKLNO:PQRST:U:VXa:bcdhiklmopqrtvwx' argument "$@";do |
| case "$argument" in |
| # a lot of these are noop right now because they are wget mirror args |
| # which curl doesn't really do, and i am not sure if i should implement them |
| 4) append_opt -4 ;; |
| 6) append_opt -6 ;; |
| A) true ;; # probably can't implement this easily... |
| B) true ;; |
| D) true ;; |
| E) true ;; |
| F) true ;; # curl doesn't care what the input is |
| H) true ;; |
| I) true ;; |
| K) true ;; |
| L) true ;; |
| N) true ;; |
| O) append_opt "-o $OPTARG" ;; |
| P) true ;; |
| Q) true ;; |
| R) true ;; |
| S) append_opt -I;reexec_without -I -s ;; |
| T) append_opt "-m $OPTARG" ;; |
| U) append_opt "--user-agent \"$OPTARG\"" ;; |
| V) version; curl --version; exit 0 ;; |
| X) true ;; |
| a) append_raw_arg "2>&1 | tee -a $OPTARG" ;; |
| b) |
| wget_log="wget-log" |
| i=1 |
| while [[ -f "${wget_log}" ]];do |
| # if that exists, increment until we find something that doesn't |
| i=$(($i+1)) |
| wget_log="wget-log.${i}" |
| done |
| append_raw_arg ">\"$wget_log\" 2>&1 &" |
| printf "Continuing in background, pid %s.\nOutput will be written to '$wget_log'.\n" "$$" |
| ;; |
| c) append_opt "-C -" ;; |
| d) append_opt "-v" ;; |
| e) true ;; |
| h) help ;; |
| i) |
| [[ ! -f "$OPTARG" ]] && error "$OPTARG does not exist" 3 |
| for url in $(<"$OPTARG");do |
| URLS=( ${URLS[@]} "$url" ) |
| done |
| ;; |
| q) append_opt "-s" ;; |
| esac |
| shift $(($OPTIND-1)) |
| done |
| |
| # set wget default equivilants |
| append_opt -L # follow redirects |
| append_opt -# # progress bar |
| |
| if [[ -z "${URLS[@]}" ]];then |
| URLS=( ${@} ) |
| fi |
| |
| for url in ${URLS[@]};do |
| url_file=${url##*/} |
| if [[ "$url" == "$url_file" ]];then |
| # has no remote file name and -o is not in CURL_OPTS... assume index.html |
| has_opt -o || append_opt "-o index.html" |
| fi |
| |
| eval "print_url '$url';curl ${CURL_OPTS} -- $url" |
| if [[ "$reexec" ]];then |
| for reexec_arg in ${reexec_args_without};do |
| CURL_OPTS_REEXEC=$(echo "${CURL_OPTS_REEXEC:-$CURL_OPTS}" | sed "s# $reexec_arg##") |
| done |
| eval "print_url '$url';curl ${CURL_OPTS_REEXEC} ${CURL_OPTS_REEXEC_ONLY} -- $url" |
| fi |
| done |