- 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>
70 lines
1.9 KiB
Bash
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"
|
|
}
|