Last active
July 7, 2023 04:37
-
-
Save cubedtear/54434fc66439fc4e04e28bd658189701 to your computer and use it in GitHub Desktop.
Self-updating bash script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
VERSION="0.0.2" | |
SCRIPT_URL='https://gist.github.com/cubedtear/54434fc66439fc4e04e28bd658189701/raw' | |
SCRIPT_DESCRIPTION="" | |
SCRIPT_LOCATION="${BASH_SOURCE[@]}" | |
rm -f updater.sh | |
function update() | |
{ | |
TMP_FILE=$(mktemp -p "" "XXXXX.sh") | |
curl -s -L "$SCRIPT_URL" > "$TMP_FILE" | |
NEW_VER=$(grep "^VERSION" "$TMP_FILE" | awk -F'[="]' '{print $3}') | |
ABS_SCRIPT_PATH=$(readlink -f "$SCRIPT_LOCATION") | |
if [ "$VERSION" \< "$NEW_VER" ] | |
then | |
printf "Updating script \e[31;1m%s\e[0m -> \e[32;1m%s\e[0m\n" "$VERSION" "$NEW_VER" | |
echo "cp \"$TMP_FILE\" \"$ABS_SCRIPT_PATH\"" > updater.sh | |
echo "rm -f \"$TMP_FILE\"" >> updater.sh | |
echo "echo Running script again: `basename ${BASH_SOURCE[@]}` $@" >> updater.sh | |
echo "exec \"$ABS_SCRIPT_PATH\" \"$@\"" >> updater.sh | |
chmod +x updater.sh | |
chmod +x "$TMP_FILE" | |
exec updater.sh | |
else | |
rm -f "$TMP_FILE" | |
fi | |
} | |
update "$@" | |
echo "$@" |
SCRIPT_DESCRIPTION
is unused and could be removed
It is intended as a placeholder in order to remember to describe the scripts usage. A comment would be enough, but they are easily forgotten.
Thanks for a very good script.
I have a few suggestions tho.
-
add a check for curl
which curls > /dev/null 2>&1 || echo "curl not found" -
check for curl download failure and add logic to skip if there is no internet connection
curl --connect-timeout 5 .... -
Your version comparison would fail: ie.
"1.10.1" < "1.2.1" will return true, when it is not.
There are a few technique to compare versions on the internet. just google it. -
update.sh is hardcoded too many times. puting it in a local variable would be better.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
SCRIPT_DESCRIPTION
is unused and could be removed${BASH_SOURCE[@]}
double quote array expansions to avoid re-splitting elements