fix: harden installer symlink logic and interactive sourcing

- install-claude-profiles: distinguish broken symlink vs real dir vs free
  path via -L/-e, repoint existing links with ln -sfn, warn instead of
  silently skipping when target is a non-symlink dir.
- profiles.sh: only set -euo pipefail when sourced non-interactively so
  sourcing in an interactive shell doesn't clobber session settings.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-06-28 03:23:03 +02:00
commit 35b2da39d2
2 changed files with 9 additions and 2 deletions

View file

@ -11,7 +11,12 @@ ALIAS_LINE="source $TARGET_REPO/shell/aliases.sh"
mkdir -p "$TARGET_DIR"
if [[ "$REPO_DIR" != "$TARGET_REPO" ]]; then
if [[ ! -e "$TARGET_REPO" ]]; then
if [[ -L "$TARGET_REPO" ]]; then
ln -sfn "$REPO_DIR" "$TARGET_REPO"
elif [[ -e "$TARGET_REPO" ]]; then
echo "Warning: $TARGET_REPO exists and is not a symlink;" >&2
echo " aliases will point there. Remove it to repoint to $REPO_DIR." >&2
else
ln -s "$REPO_DIR" "$TARGET_REPO"
fi
fi

View file

@ -1,5 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
# Only enforce strict mode when sourced non-interactively, so sourcing this
# file in an interactive shell doesn't clobber the user's session settings.
[[ $- == *i* ]] || set -euo pipefail
repo_root() {
local script_dir