Files
dotfiles/proxy-client/.config/proxy-client/shell.bash
T
ddadminandClaude Opus 5.5 06ca4ab0c6 refactor(proxy-client): упростить установщик пакета и shell-тесты
- install.sh ставит три прямые ссылки без Stow; чужие файлы не трогает
  и перечисляет все конфликты сразу; ~/.local и ~/.config могут быть
  ссылками; блок в ~/.bashrc дописывается, если нет маркера.
- proxy_on читает вывод proxy-client env без временного файла.
- Тесты Bash-функций работают через поддельный PROXY_CLIENT_BIN.
- test_proxy_client_full.sh запускает только тесты proxy-client,
  прогон под Python 3.8 — если есть uv.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-28 09:28:07 -04:00

70 lines
1.9 KiB
Bash

# Переносимый Bash-интерфейс proxy-client. Файл можно подключать отдельно от
# остальных dotfiles: source ~/.config/proxy-client/shell.bash
_proxy_cli() {
"${PROXY_CLIENT_BIN:-proxy-client}" "$@"
}
# Применяет вывод "proxy-client env" целиком или не применяет ничего.
_proxy_apply_env() {
local line key
local -A proxy_values=()
while IFS= read -r line; do
if [[ "$line" != *=* ]]; then
echo "Ошибка: proxy-client env вернул строку без '='" >&2
return 1
fi
key="${line%%=*}"
case "$key" in
HTTP_PROXY|HTTPS_PROXY|ALL_PROXY|NO_PROXY|http_proxy|https_proxy|all_proxy|no_proxy) ;;
*)
echo "Ошибка: proxy-client env вернул неизвестный ключ: $key" >&2
return 1
;;
esac
proxy_values["$key"]="${line#*=}"
done <<< "$1"
for key in "${!proxy_values[@]}"; do
export "$key=${proxy_values[$key]}"
done
}
proxy_on() {
local output
if ! output="$(_proxy_cli env)" || ! _proxy_apply_env "$output"; then
echo "Ошибка: прокси не включён" >&2
return 1
fi
echo "Прокси включён"
}
proxy_off() {
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
unset http_proxy https_proxy all_proxy no_proxy
echo "Прокси выключен"
}
_proxy_run() {
local command_name="${1:-}"
if [ -z "$command_name" ]; then
echo "Ошибка: не указана команда" >&2
return 2
fi
shift
_proxy_cli run -- "$command_name" "$@"
}
pclaude() { _proxy_run claude "$@"; }
pcodex() { _proxy_run codex "$@"; }
myip() {
local address
if ! address="$(curl -fsS --max-time 3 https://ifconfig.me)"; then
echo "Ошибка: не удалось определить внешний IP" >&2
return 1
fi
printf 'IP: %s\n' "$address"
}