#!/usr/bin/env bash # ERR Trap Inheritance by shell functions, command substitutions, and subshells. set -E # Exit on Error Causes the script to immediately exit if any command returns a non-zero exit status unless that command is followed by || to explicitly handle the error. set -e # Treats the use of undefined variables as an error, causing the script to exit. set -u # Ensures that a pipeline (a series of commands connected by |) fails if any command within it fails, rather than only failing if the last command fails. set -o pipefail # Cleaup script. trap cleanup SIGINT SIGTERM ERR EXIT # Get the script location and cd to it. script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) # Usage error message. usage() { cat <&2 -e "${1-}" } # Script exit implementation. die() { local msg=$1 local code=${2-1} # default exit status 1 msg "\033[0;31m$msg\033[0m" exit "$code" } # Parameter parsing implementation. parse_params() { while :; do case "${1-}" in -h | --help) usage ;; -v | --verbose) set -x ;; --no-color) NO_COLOR=1 ;; -?*) die "Unknown option: $1" ;; *) break ;; esac shift done args=("$@") return 0 } # ----- Script Start ----- # Parse parameters and setup colors for script. parse_params "$@" setup_colors # Script logic example here. # Exit if not run as root if [ "$EUID" -ne 0 ]; then echo "This script must be run as root. Use sudo." >&2 exit 1 fi # URL of the file to download URL="https://myrepos.dev/Randy-Jordan/eg/raw/branch/main/xdg/user-dirs.custom" # Target file TARGET="/etc/xdg/user-dirs.defaults" # Temporary file for safe download TMPFILE=$(mktemp) # Download the file msg "Downloading file from $URL..." if curl -fsSL "$URL" -o "$TMPFILE"; then msg "Download successful." # Backup the current file msg "Backing up existing file to ${TARGET}.bak" cp "$TARGET" "${TARGET}.bak" # Replace the file msg "Replacing $TARGET with downloaded file..." cp "$TMPFILE" "$TARGET" msg "Replacement complete." else msg "Download failed. Aborting." fi # Clean up temporary file rm -f "$TMPFILE" xdg-user-dirs-update --force exit 0