#!/bin/bash
-# Copyright (C) 2017 Ian Kelling
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
+
+# Copyright 2024 Ian Kelling
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# See the License for the specific language governing permissions and
# limitations under the License.
+
set -eE -o pipefail
trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
[[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@"
usage() {
- cat <<EOF
+ cat <<EOF
Usage: ${0##*/} []
Install or uninstall files to /usr/local/bin
Note: Uses GNU getopt options parsing style
EOF
- exit $1
+ exit $1
}
dry=false
uninstall=false # default
temp=$(getopt -l help,uninstall,dry-run hun "$@") || usage 1
eval set -- "$temp"
while true; do
- case $1 in
- -n|--dry-run) dry=true; shift ;;
- -u|--uninstall) uninstall=true; shift ;;
- -h|--help) usage ;;
- --) shift; break ;;
- *) echo "$0: Internal error! unexpected args: $*" ; exit 1 ;;
- esac
+ case $1 in
+ -n|--dry-run) dry=true; shift ;;
+ -u|--uninstall) uninstall=true; shift ;;
+ -h|--help) usage ;;
+ --) shift; break ;;
+ *) echo "$0: Internal error! unexpected args: $*" ; exit 1 ;;
+ esac
done
files=()
for f in *; do
- if [[ -x $f && ! -d $f && ! -L $f && $f != setup ]]; then
- files+=($f)
- fi
+ if [[ -x $f && ! -d $f && ! -L $f && $f != setup ]]; then
+ files+=($f)
+ fi
done
if $uninstall; then
- if $dry; then
- echo "setup dry run: cd /usr/local/bin"
- echo "setup dry run: rm -fv ${files[*]}"
- else
- cd /usr/local/bin
- rm -fv ${files[@]}
- fi
+ if $dry; then
+ echo "setup dry run: cd /usr/local/bin"
+ echo "setup dry run: rm -fv ${files[*]}"
+ else
+ cd /usr/local/bin
+ rm -fv ${files[@]}
+ fi
else
- if $dry; then
- echo "setup dry run: install -v ${files[*]} /usr/local/bin"
- else
- install -v ${files[@]} /usr/local/bin
- fi
+ if $dry; then
+ echo "setup dry run: install ${files[*]} /usr/local/bin"
+ else
+ install -C ${files[@]} /usr/local/bin
+ fi
fi