mirror of https://github.com/schollz/croc.git
First pass at a rewrite.
This commit is contained in:
parent
02f89b1854
commit
6178a7e16b
|
@ -0,0 +1,188 @@
|
||||||
|
#!/bin/bash -
|
||||||
|
#===============================================================================
|
||||||
|
#
|
||||||
|
# FILE: default.txt.sh
|
||||||
|
#
|
||||||
|
# USAGE: ./default.txt.sh
|
||||||
|
#
|
||||||
|
# DESCRIPTION:
|
||||||
|
#
|
||||||
|
# OPTIONS: ---
|
||||||
|
# REQUIREMENTS: ---
|
||||||
|
# BUGS: ---
|
||||||
|
# NOTES: ---
|
||||||
|
# AUTHOR: Micheal Quinn, micheal.quinn85@gmail.com
|
||||||
|
# COMPANY:
|
||||||
|
# ORGANIZATION:
|
||||||
|
# CREATED: 08/10/2019 16:41
|
||||||
|
# REVISION: 0.0.0
|
||||||
|
#===============================================================================
|
||||||
|
set -o nounset # Treat unset variables as an error
|
||||||
|
|
||||||
|
#--- FUNCTION ----------------------------------------------------------------
|
||||||
|
# NAME: determine_os
|
||||||
|
# DESCRIPTION: Attempts to determin host os using uname
|
||||||
|
# PARAMETERS: none
|
||||||
|
# RETURNS: 0 = OS Detected. Also prints detected os to stdout
|
||||||
|
# 1 = Unkown OS
|
||||||
|
# 2 = 'uname' not found in path
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
determine_os() {
|
||||||
|
local uname_cmd
|
||||||
|
local uname_out
|
||||||
|
|
||||||
|
uname_cmd="$(command -v uname)"
|
||||||
|
|
||||||
|
if [[ "${uname_cmd}" == "" ]]; then
|
||||||
|
return 2
|
||||||
|
else
|
||||||
|
uname_out="$(uname)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${uname_out}" == "" ]]; then
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
echo "${uname_out}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#--- FUNCTION ----------------------------------------------------------------
|
||||||
|
# NAME: determine_arch
|
||||||
|
# DESCRIPTION: Attempt to determin architecture of host
|
||||||
|
# PARAMETERS: none
|
||||||
|
# RETURNS: 0 = Arch Detected. Also prints detected arch to stdout
|
||||||
|
# 1 = Unkown arch
|
||||||
|
# 2 = 'uname' not found in path
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
determine_arch() {
|
||||||
|
local uname_cmd
|
||||||
|
local uname_out
|
||||||
|
|
||||||
|
uname_cmd="$(command -v uname)"
|
||||||
|
|
||||||
|
if [[ "${uname_cmd}" == "" ]]; then
|
||||||
|
return 2
|
||||||
|
else
|
||||||
|
uname_out="$(uname -m)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${uname_out}" == "" ]]; then
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
echo "${uname_out}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#--- FUNCTION ----------------------------------------------------------------
|
||||||
|
# NAME: download_file
|
||||||
|
# DESCRIPTION: Downloads a file into the specified directory. Attempts to
|
||||||
|
# use curl, then wget. If neither is found, fail.
|
||||||
|
# PARAMETERS: $1 = url of file to download
|
||||||
|
# $2 = location to download file into on host system
|
||||||
|
# RETURNS: If curl or wget found, returns the return code of curl or wget
|
||||||
|
# 2 = Could not find curl and wget
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
download_file() {
|
||||||
|
local url
|
||||||
|
local dir
|
||||||
|
local filename
|
||||||
|
local rcode
|
||||||
|
|
||||||
|
url="${1}"
|
||||||
|
dir="${2}"
|
||||||
|
filename="${3}"
|
||||||
|
|
||||||
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
curl -fsSL "${url}" -o "${dir}/${filename}"
|
||||||
|
rcode="${?}"
|
||||||
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
|
wget --quiet "${url}" -O "${dir}/${filename}"
|
||||||
|
rcode="${?}"
|
||||||
|
else
|
||||||
|
echo "== Could not find curl or wget"
|
||||||
|
rcode="2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return "${rcode}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#--- FUNCTION ----------------------------------------------------------------
|
||||||
|
# NAME: main
|
||||||
|
# DESCRIPTION: Put it all together in a logical way
|
||||||
|
# ...at least that is the hope...
|
||||||
|
# PARAMETERS: none
|
||||||
|
# RETURNS: 0 = All good
|
||||||
|
# 1 = Something done broke
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
main() {
|
||||||
|
local prefix
|
||||||
|
local tmpdir
|
||||||
|
local croc_arch
|
||||||
|
local croc_os
|
||||||
|
local croc_base_url
|
||||||
|
local croc_url
|
||||||
|
local croc_file
|
||||||
|
local croc_bin_name
|
||||||
|
local croc_version
|
||||||
|
local croc_dl_ext
|
||||||
|
|
||||||
|
croc_bin_name="croc"
|
||||||
|
croc_version="6.1.1"
|
||||||
|
croc_dl_ext="tar.gz"
|
||||||
|
croc_base_url="https://github.com/schollz/croc/releases/download"
|
||||||
|
prefix="/usr/local/bin"
|
||||||
|
tmpdir="$(mktemp -d --suffix="_${croc_bin_name}")"
|
||||||
|
|
||||||
|
croc_arch="$(determine_arch)"
|
||||||
|
croc_arch_rcode="${?}"
|
||||||
|
if [[ "${croc_arch_rcode}" == "0" ]]; then
|
||||||
|
echo "== Architecture detected as ${croc_arch}"
|
||||||
|
elif [[ "${croc_arch_rcode}" == "1" ]]; then
|
||||||
|
echo "== Architecture not detected"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "== 'uname' not found in path. Is it installed?"
|
||||||
|
fi
|
||||||
|
|
||||||
|
croc_os="$(determine_os)"
|
||||||
|
croc_os_rcode="${?}"
|
||||||
|
if [[ "${croc_os_rcode}" == "0" ]]; then
|
||||||
|
echo "== OS detected as ${croc_os}"
|
||||||
|
elif [[ "${croc_os_rcode}" == "1" ]]; then
|
||||||
|
echo "== OS not detected"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "== 'uname' not found in path. Is it installed?"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "${croc_arch}" in
|
||||||
|
"x86_64" ) croc_arch="64bit";;
|
||||||
|
"amd64" ) croc_arch="64bit";;
|
||||||
|
"aarch64" ) croc_arch="ARM64";;
|
||||||
|
"i686" ) croc_arch="32bit";;
|
||||||
|
* ) croc_arch="unknown";;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
croc_file="${croc_bin_name}_${croc_version}_${croc_os}-${croc_arch}.${croc_dl_ext}"
|
||||||
|
croc_url="${croc_base_url}/v${croc_version}/${croc_file}"
|
||||||
|
|
||||||
|
download_file "${croc_url}" "${tmpdir}" "${croc_file}"
|
||||||
|
download_file_rcode="${?}"
|
||||||
|
if [[ "${download_file_rcode}" == "0" ]]; then
|
||||||
|
echo "== Downloaded croc archive into ${tmpdir}"
|
||||||
|
elif [[ "${download_file_rcode}" == "1" ]]; then
|
||||||
|
echo "== Failed to download croc archive"
|
||||||
|
exit 1
|
||||||
|
elif [[ "${download_file_rcode}" == "2" ]]; then
|
||||||
|
echo "== Failed to locate curl or wget"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "== Return code of download tool returned an unexpected value of ${download_file_rcode}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
Loading…
Reference in New Issue