Bug fixed?
This commit is contained in:
parent
7049ef8054
commit
986d602ac4
|
@ -0,0 +1,155 @@
|
||||||
|
#!/bin/sh
|
||||||
|
##############################
|
||||||
|
# name: gendl
|
||||||
|
# lisc: gnu gplv3
|
||||||
|
# desc: download to stdout or
|
||||||
|
# file, independent of
|
||||||
|
# a specific downloader.
|
||||||
|
# ftp/wget/curl support.
|
||||||
|
# main: jadedctrl
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# usage: gendl [-o output] url
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------
|
||||||
|
# backend bits
|
||||||
|
|
||||||
|
# NIL --> STRING
|
||||||
|
# return the download program you're using
|
||||||
|
function download_program
|
||||||
|
{
|
||||||
|
programs="ftp curl wget"
|
||||||
|
current=""
|
||||||
|
|
||||||
|
for program in $programs
|
||||||
|
do
|
||||||
|
if whereis $program > /dev/null
|
||||||
|
then
|
||||||
|
current=$program
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if uname -s | grep -e "LibertyBSD" -e "OpenBSD" > /dev/null
|
||||||
|
then
|
||||||
|
current="ftp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$current"
|
||||||
|
}
|
||||||
|
|
||||||
|
# STRING PATH --> NIL
|
||||||
|
# download URL $1 to stdout
|
||||||
|
function download_stdout
|
||||||
|
{
|
||||||
|
program=$(download_program)
|
||||||
|
url=$1
|
||||||
|
|
||||||
|
case "$program" in
|
||||||
|
"ftp")
|
||||||
|
output="$(ftp -VMo- $url)"
|
||||||
|
;;
|
||||||
|
"curl")
|
||||||
|
output="$(curl $url)"
|
||||||
|
;;
|
||||||
|
"wget")
|
||||||
|
output="$(wget --quiet -O $url)"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return_code=$?
|
||||||
|
|
||||||
|
echo "$output"
|
||||||
|
return $return_code
|
||||||
|
}
|
||||||
|
|
||||||
|
# STRING PATH --> NIL
|
||||||
|
# download URL $1 to path $2
|
||||||
|
function download_file
|
||||||
|
{
|
||||||
|
program=$(download_program)
|
||||||
|
url=$1
|
||||||
|
path=$2
|
||||||
|
|
||||||
|
case "$program" in
|
||||||
|
"ftp")
|
||||||
|
ftp -VMU "." -o $path $url
|
||||||
|
;;
|
||||||
|
"curl")
|
||||||
|
curl -o $path $url
|
||||||
|
;;
|
||||||
|
"wget")
|
||||||
|
wget --quiet -O $path $url
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return_code=$?
|
||||||
|
|
||||||
|
if test $return_code -ne 0 2>/dev/null
|
||||||
|
then
|
||||||
|
rm $path 2> /dev/null
|
||||||
|
# for consistency in behavior; wget saves 404s anyway, whereas
|
||||||
|
# ftp doesn't save anything from 404s, etc.
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $return_code
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
# front-end string-manip
|
||||||
|
|
||||||
|
# STRING --> STRING
|
||||||
|
# return the last word in a string
|
||||||
|
function last_word
|
||||||
|
{
|
||||||
|
string="$1"
|
||||||
|
|
||||||
|
echo "$string" \
|
||||||
|
| rev \
|
||||||
|
| sed 's% .*%%' \
|
||||||
|
| rev
|
||||||
|
}
|
||||||
|
|
||||||
|
function usage
|
||||||
|
{
|
||||||
|
echo "usage: gendl [-o output] URL"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# --------------------------------------
|
||||||
|
# invocation
|
||||||
|
|
||||||
|
args="$(getopt o: $*)"
|
||||||
|
if test -z "$@" 2>/dev/null
|
||||||
|
then
|
||||||
|
usage
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
set -- $args
|
||||||
|
while test $# -ne 0
|
||||||
|
do
|
||||||
|
case "$1"
|
||||||
|
in
|
||||||
|
-o)
|
||||||
|
download_path="$2"; shift; shift;;
|
||||||
|
--)
|
||||||
|
shift; break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
url="$(last_word "$@")"
|
||||||
|
|
||||||
|
|
||||||
|
if test -n "$download_path" 2> /dev/null
|
||||||
|
then
|
||||||
|
download_file $url $download_path
|
||||||
|
else
|
||||||
|
download_stdout "$url"
|
||||||
|
fi
|
Reference in New Issue