#!/usr/bin/env bash # Ставит proxy-client в домашний каталог: три ссылки на этот каталог и # (по умолчанию) блок в ~/.bashrc. Повторный запуск ничего не меняет. set -euo pipefail PACKAGE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" SETUP_SHELL=1 usage() { cat <<'EOF' Использование: ./install.sh [--no-shell-setup] --no-shell-setup не изменять ~/.bashrc EOF } while [ "$#" -gt 0 ]; do case "$1" in --no-shell-setup) SETUP_SHELL=0 ;; -h|--help) usage exit 0 ;; *) echo "Ошибка: неизвестный параметр: $1" >&2 usage >&2 exit 2 ;; esac shift done # Машинные config и default.url сюда не входят: они живут только в $HOME. LINKS=( .local/bin/proxy-client .config/proxy-client/shell.bash .config/proxy-client/examples ) # Существующая ссылка на этот же файл пакета — не конфликт, всё остальное # (включая битую ссылку) не трогаем. conflicts=() for link in "${LINKS[@]}"; do target="$HOME/$link" if [ -e "$target" ] || [ -L "$target" ]; then if [ "$(readlink -f "$target" 2>/dev/null)" != "$PACKAGE_DIR/$link" ]; then conflicts+=("$target") fi fi done if [ "${#conflicts[@]}" -gt 0 ]; then echo "Ошибка: пути уже заняты, установка не выполнена:" >&2 printf ' %s\n' "${conflicts[@]}" >&2 echo "Удалите или переименуйте их и повторите установку." >&2 exit 1 fi mkdir -p "$HOME/.local/bin" "$HOME/.config/proxy-client" for link in "${LINKS[@]}"; do [ -e "$HOME/$link" ] || ln -s "$PACKAGE_DIR/$link" "$HOME/$link" done SHELL_BLOCK_START='# >>> proxy-client >>>' if [ "$SETUP_SHELL" -eq 0 ]; then echo "Настройка Bash пропущена (--no-shell-setup)." # Команда для пользователя: $HOME и $PATH раскроются в его сессии. # shellcheck disable=SC2016 RELOAD_COMMAND='export PATH="$HOME/.local/bin:$PATH"; source ~/.config/proxy-client/shell.bash' else if ! grep -Fqx "$SHELL_BLOCK_START" "$HOME/.bashrc" 2>/dev/null; then cat >> "$HOME/.bashrc" <