Menu
Public repository / 5113300d6181fcc9ebf43e1c12a8300c4873854b
AkurAI-EC2 / install.sh
Latest change 8fd2ab2c4d35f12420c1578debb442a5883d0f64 - chore: version akurai ec2 cli by Claude Code
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'EOF'
usage: ./install.sh [--symlink|--copy] [--dry-run]
Install bin/akurai-ec2 to ~/.local/bin/akurai-ec2.
--symlink install a symlink (default)
--copy install a standalone copy
--dry-run print the actions without changing anything
EOF
}
die() {
printf 'install.sh: %s\n' "$*" >&2
exit 1
}
run() {
if [ "$dry_run" -eq 1 ]; then
printf '+'
printf ' %q' "$@"
printf '\n'
else
"$@"
fi
}
mode="symlink"
dry_run=0
while [ $# -gt 0 ]; do
case "$1" in
--symlink)
mode="symlink"
;;
--copy)
mode="copy"
;;
--dry-run)
dry_run=1
;;
-h|--help)
usage
exit 0
;;
*)
die "unknown argument: $1"
;;
esac
shift
done
script_dir="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
src="$script_dir/bin/akurai-ec2"
target="${AKURAI_EC2_INSTALL_TARGET:-$HOME/.local/bin/akurai-ec2}"
target_dir="$(dirname -- "$target")"
[ -f "$src" ] || die "source script not found: $src"
src_resolved="$(readlink -f -- "$src")"
timestamp="$(date +%Y%m%d%H%M%S)"
backup=""
run mkdir -p -- "$target_dir"
run chmod 755 -- "$src"
if [ "$mode" = "symlink" ] && [ -L "$target" ]; then
target_resolved="$(readlink -f -- "$target" 2>/dev/null || true)"
if [ "$target_resolved" = "$src_resolved" ]; then
printf 'already linked: %s -> %s\n' "$target" "$src"
exit 0
fi
fi
if [ "$mode" = "copy" ] && [ -f "$target" ] && [ ! -L "$target" ] && cmp -s -- "$src" "$target"; then
run chmod 755 -- "$target"
printf 'already installed: %s\n' "$target"
exit 0
fi
if [ -e "$target" ] || [ -L "$target" ]; then
backup="$target.bak.$timestamp"
run mv -- "$target" "$backup"
printf 'backed up existing target to %s\n' "$backup"
fi
if [ "$mode" = "copy" ]; then
run install -m 755 -- "$src" "$target"
printf 'installed copy: %s\n' "$target"
else
run ln -s -- "$src" "$target"
printf 'installed symlink: %s -> %s\n' "$target" "$src"
fi