适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。
前言
WSL
可以方便地使用 Linux
来进行一些操作,不需要到 VPS 运行,使用中发现连接本地代理并不是简单的使用 127.0.0.1
,发现已经有人写了现成的脚本,所以复制过来,简单记录一下,除此之外再记录一下其终端的美化。
安装
直接在终端输入安装命令,默认安装的是商店版本的 WSL2
wsl --list --online
wsl --install
如果需要完整的说明可以参考:官方文档
WSL 配置
在 Windows 用户目录下创建文件 .wslconfig
,添加如下配置:
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=false # 设置为 true 自动使用 Windows 代理
ipv6=true
[experimental]
sparseVhd=true
hostAddressLoopback=true
autoMemoryReclaim=gradual
配置文件会把 WSL 的网络模式改为镜像模式,可以直接使用 Windows 的网络,共享 IP 地址。
Root 登录
在 wsl 系统中 /etc/wsl.conf
配置中添加:
[user]
default=root
设置代理
如果上述配置中 autoProxy=false
,需要手动配置代理解决网络问题,通过脚本文件来为环境设置代理,方法参考:WSL2 中访问宿主机 Windows 的代理 进行了优化。脚本包括环境、Git 以及 docker pull 的代理设置。
系统环境
新建一个脚本文件 proxy.sh
并添加执行权限。
touch ./proxy.sh
chmod +x ./proxy.sh
vim ./proxy.sh
#!/bin/bash
# WSL 环境变量代理管理脚本
# 仅负责当前会话的环境变量代理设置
# 配置参数
DEFAULT_HTTP_PORT=7890
DEFAULT_HOST="127.0.0.1" # 镜像模式使用
# DEFAULT_HOST=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }') # NAT模式使用
# 检测脚本调用方式
detect_source_call() {
[[ "${BASH_SOURCE[0]}" != "${0}" ]]
}
# 安全退出函数
safe_exit() {
local code=${1:-0}
if detect_source_call; then
# 在source模式下,设置一个特殊变量来标记退出
_PROXY_SCRIPT_EXIT=1
return $code
else
exit $code
fi
}
# 获取配置
get_proxy_config() {
local host=${1:-$DEFAULT_HOST}
local port=${2:-$DEFAULT_HTTP_PORT}
echo "http://${host}:${port}"
}
# 设置环境变量代理
set_env_proxy() {
local proxy_url=$(get_proxy_config)
echo "Setting environment proxy to: ${proxy_url}"
export http_proxy="${proxy_url}"
export HTTP_PROXY="${proxy_url}"
export https_proxy="${proxy_url}"
export HTTPS_PROXY="${proxy_url}"
export no_proxy="localhost,127.0.0.1,::1"
export NO_PROXY="localhost,127.0.0.1,::1"
echo "✓ Environment proxy set successfully!"
}
# 取消环境变量代理
unset_env_proxy() {
echo "Unsetting environment proxy..."
unset http_proxy
unset HTTP_PROXY
unset https_proxy
unset HTTPS_PROXY
unset no_proxy
unset NO_PROXY
echo "✓ Environment proxy unset successfully!"
}
# 检查环境变量代理状态
check_env_status() {
local proxy_url=$(get_proxy_config)
echo "==================== Environment Proxy Status ===================="
echo "Configuration:"
echo " Default Host: ${DEFAULT_HOST}"
echo " Default Port: ${DEFAULT_HTTP_PORT}"
echo " Proxy URL: ${proxy_url}"
echo ""
echo "Current Environment Variables:"
echo " http_proxy: ${http_proxy:-Not set}"
echo " https_proxy: ${https_proxy:-Not set}"
echo " no_proxy: ${no_proxy:-Not set}"
echo "=================================================================="
}
# 测试环境变量代理连通性
test_env_connectivity() {
echo "==================== Environment Proxy Test ===================="
# 测试网站列表
local sites=("https://www.google.com" "https://github.com" "https://raw.githubusercontent.com")
for site in "${sites[@]}"; do
local name=$(echo "$site" | sed 's/https:\/\/\(www\.\)\?//' | sed 's/\/.*//')
echo -n "Testing ${name}... "
if curl -I --connect-timeout 5 --max-time 10 "$site" > /dev/null 2>&1; then
echo "✓ Accessible"
else
echo "✗ Not accessible"
fi
done
echo "================================================================"
}
# 显示帮助
show_help() {
echo "WSL Environment Proxy Management Script"
echo ""
echo "⚠️ This script MUST be called with 'source' to work!"
echo ""
echo "Usage: source $0 [command]"
echo ""
echo "Commands:"
echo " set Set environment proxy"
echo " unset Unset environment proxy"
echo " status Check environment proxy status"
echo " test Test environment proxy connectivity"
echo " check Check status + test connectivity"
echo " menu Show interactive menu"
echo " help Show this help message"
echo ""
echo "💡 Pro Tips:"
echo " - Add 'alias proxy=\"source $0\"' to ~/.bashrc"
echo " - This only affects current shell session"
echo " - Use proxy-git.sh and proxy-docker.sh for persistent settings"
}
# 显示交互菜单
show_menu() {
local proxy_url=$(get_proxy_config)
# 重置退出标志
unset _PROXY_SCRIPT_EXIT
while true; do
# 检查退出标志
if [[ "${_PROXY_SCRIPT_EXIT}" == "1" ]]; then
unset _PROXY_SCRIPT_EXIT
break
fi
echo ""
echo "=============== Environment Proxy Manager ==============="
echo "Current Configuration: ${proxy_url}"
echo ""
if ! detect_source_call; then
echo "⚠️ WARNING: Script not sourced! Commands won't work."
echo " Please run: source $0 menu"
echo ""
fi
echo "Environment Proxy Commands:"
echo " 1) Set Environment Proxy"
echo " 2) Unset Environment Proxy"
echo " 3) Check Proxy Status"
echo " 4) Test Connectivity"
echo " 5) Check Status + Test"
echo ""
echo " 0) Exit"
echo "======================================================="
echo -n "Select option [0-5]: "
read -r choice
case $choice in
1)
echo ""
if ! detect_source_call; then
echo "⚠️ Please run: source $0 menu"
else
set_env_proxy
fi
;;
2)
echo ""
if ! detect_source_call; then
echo "⚠️ Please run: source $0 menu"
else
unset_env_proxy
fi
;;
3) echo ""; check_env_status ;;
4) echo ""; test_env_connectivity ;;
5) echo ""; check_env_status; echo ""; test_env_connectivity ;;
6)
echo ""
echo "Goodbye!"
safe_exit 0
;;
*) echo ""; echo "Invalid option. Please select 0-5." ;;
esac
# 检查是否需要退出
if [[ "${_PROXY_SCRIPT_EXIT}" == "1" ]]; then
unset _PROXY_SCRIPT_EXIT
break
fi
echo ""
echo -n "Press Enter to continue..."
read -r
done
}
# 主程序逻辑
main() {
local cmd="$1"
# 检查是否被source调用
if ! detect_source_call; then
echo "⚠️ ERROR: This script MUST be called with 'source'!"
echo ""
echo "Correct usage:"
echo " source $0 [command]"
echo ""
echo "Example:"
echo " source $0 set"
echo " source $0 menu"
echo ""
exit 1
fi
# 如果没有参数,显示菜单
if [[ -z "$cmd" ]]; then
show_menu
return
fi
# 执行对应的命令
case "$cmd" in
"set") set_env_proxy ;;
"unset") unset_env_proxy ;;
"status") check_env_status ;;
"test") test_env_connectivity ;;
"check") check_env_status; echo ""; test_env_connectivity ;;
"menu") show_menu ;;
"help") show_help ;;
*)
echo "Error: Unknown command '$cmd'"
echo ""
show_help
safe_exit 1
;;
esac
}
# 执行主程序
main "$@"
注意
环境变量的代理并不会持久化设置,如果想要开启终端就打开代理,可以在 .zshrc
中设置打开终端执行脚本。
Git
Git 的代理设置是写入在全局配置环境中,因此设置一次即可。
#!/bin/bash
# Git 代理管理脚本
# 独立管理Git的全局代理配置
# 配置参数
DEFAULT_HTTP_PORT=7890
DEFAULT_HOST="127.0.0.1"
# 获取配置
get_proxy_config() {
local host=${1:-$DEFAULT_HOST}
local port=${2:-$DEFAULT_HTTP_PORT}
echo "http://${host}:${port}"
}
# 设置Git代理
set_git_proxy() {
local proxy_url=$(get_proxy_config)
echo "Setting Git proxy to: ${proxy_url}"
git config --global http.proxy "${proxy_url}"
git config --global https.proxy "${proxy_url}"
echo "✓ Git proxy set successfully!"
echo " All git operations will use proxy: ${proxy_url}"
}
# 取消Git代理
unset_git_proxy() {
echo "Unsetting Git proxy..."
git config --global --unset http.proxy 2>/dev/null || true
git config --global --unset https.proxy 2>/dev/null || true
echo "✓ Git proxy unset successfully!"
}
# 检查Git代理状态
check_git_status() {
echo "==================== Git Proxy Status ===================="
echo "Global Git Proxy Settings:"
local git_http=$(git config --global --get http.proxy 2>/dev/null || echo "Not set")
local git_https=$(git config --global --get https.proxy 2>/dev/null || echo "Not set")
echo " http.proxy: ${git_http}"
echo " https.proxy: ${git_https}"
echo "==========================================================="
}
# 测试Git连接
test_git_connectivity() {
echo "==================== Git Connectivity Test ===================="
local test_repos=(
"https://github.com/octocat/Hello-World.git"
"https://gitlab.com/gitlab-org/gitlab.git"
)
for repo in "${test_repos[@]}"; do
local name=$(echo "$repo" | sed 's/https:\/\/\([^\/]*\).*/\1/')
echo -n "Testing ${name}... "
if timeout 10 git ls-remote --exit-code "$repo" > /dev/null 2>&1; then
echo "✓ Accessible"
else
echo "✗ Not accessible"
fi
done
echo "================================================================"
}
# 显示帮助
show_help() {
echo "Git Proxy Management Script"
echo ""
echo "Usage: $0 [command]"
echo ""
echo "Commands:"
echo " set Set global Git proxy"
echo " unset Unset global Git proxy"
echo " status Check Git proxy settings"
echo " test Test Git connectivity"
echo " check Check status + test connectivity"
echo " menu Show interactive menu"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " $0 set"
echo " $0 unset"
echo " $0 status"
}
# 显示交互菜单
show_menu() {
local proxy_url=$(get_proxy_config)
while true; do
echo ""
echo "=================== Git Proxy Manager ==================="
echo "Current Configuration: ${proxy_url}"
echo ""
echo "Git Proxy Commands:"
echo " 1) Set Global Git Proxy"
echo " 2) Unset Global Git Proxy"
echo " 3) Check Git Proxy Status"
echo " 4) Test Git Connectivity"
echo " 5) Check Status + Test"
echo ""
echo " 0) Exit"
echo "======================================================="
echo -n "Select option [0-5]: "
read -r choice
case $choice in
1) echo ""; set_git_proxy ;;
2) echo ""; unset_git_proxy ;;
3) echo ""; check_git_status ;;
4) echo ""; test_git_connectivity ;;
5) echo ""; check_git_status; echo ""; test_git_connectivity ;;
6) echo ""; echo "Goodbye!"; exit 0 ;;
*) echo ""; echo "Invalid option. Please select 0-5." ;;
esac
echo ""
echo -n "Press Enter to continue..."
read -r
done
}
# 主程序逻辑
main() {
local cmd="$1"
# 如果没有参数,显示菜单
if [[ -z "$cmd" ]]; then
show_menu
return
fi
# 执行对应的命令
case "$cmd" in
"set") set_git_proxy ;;
"unset") unset_git_proxy ;;
"status") check_git_status ;;
"test") test_git_connectivity ;;
"check") check_git_status; echo ""; test_git_connectivity ;;
"menu") show_menu ;;
"help") show_help ;;
*)
echo "Error: Unknown command '$cmd'"
echo ""
show_help
exit 1
;;
esac
}
# 执行主程序
main "$@"
Docker
Docker 的代理设置分为两种,一种是拉取推送镜像时的代理,另一种是构建或者运行时的代理,二者写入的文件不同。
#!/bin/bash
# Docker 完整代理管理脚本
# 管理Docker的各种代理设置:pull、run、build等
# 配置参数
DEFAULT_HTTP_PORT=7890
DEFAULT_HOST="127.0.0.1"
# 配置文件路径
DOCKER_SERVICE_DIR="/etc/systemd/system/docker.service.d"
DOCKER_PROXY_CONF="${DOCKER_SERVICE_DIR}/http-proxy.conf"
DOCKER_CONFIG_DIR="$HOME/.docker"
DOCKER_CONFIG_FILE="${DOCKER_CONFIG_DIR}/config.json"
# 获取配置
get_proxy_config() {
local host=${1:-$DEFAULT_HOST}
local port=${2:-$DEFAULT_HTTP_PORT}
echo "http://${host}:${port}"
}
# 检查权限
check_sudo() {
if [[ $EUID -ne 0 ]] && ! sudo -n true 2>/dev/null; then
echo "⚠️ Some operations require sudo privileges."
echo " Please ensure you can run sudo commands."
fi
}
# 设置Docker守护进程代理(用于pull镜像)
set_docker_daemon_proxy() {
local proxy_url=$(get_proxy_config)
echo "Setting Docker daemon proxy to: ${proxy_url}"
# 创建目录
sudo mkdir -p "$DOCKER_SERVICE_DIR"
# 写入配置文件
echo "[Service]" | sudo tee "$DOCKER_PROXY_CONF" > /dev/null
echo "Environment=\"HTTP_PROXY=${proxy_url}\"" | sudo tee -a "$DOCKER_PROXY_CONF" > /dev/null
echo "Environment=\"HTTPS_PROXY=${proxy_url}\"" | sudo tee -a "$DOCKER_PROXY_CONF" > /dev/null
echo "Environment=\"NO_PROXY=localhost,127.0.0.1,::1\"" | sudo tee -a "$DOCKER_PROXY_CONF" > /dev/null
# 重新加载Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
echo "✓ Docker daemon proxy set successfully!"
}
# 取消Docker守护进程代理
unset_docker_daemon_proxy() {
echo "Unsetting Docker daemon proxy..."
if [[ -f "$DOCKER_PROXY_CONF" ]]; then
sudo rm -f "$DOCKER_PROXY_CONF"
sudo systemctl daemon-reload
sudo systemctl restart docker
echo "✓ Docker daemon proxy unset successfully!"
else
echo "No Docker proxy configuration found."
fi
}
# 设置Docker客户端代理(用于docker命令)
set_docker_client_proxy() {
local proxy_url=$(get_proxy_config)
echo "Setting Docker client proxy to: ${proxy_url}"
mkdir -p "$DOCKER_CONFIG_DIR"
# 创建或更新配置文件
echo "{" | tee "$DOCKER_CONFIG_FILE" > /dev/null
echo " \"proxies\": {" | tee -a "$DOCKER_CONFIG_FILE" > /dev/null
echo " \"default\": {" | tee -a "$DOCKER_CONFIG_FILE" > /dev/null
echo " \"httpProxy\": \"${proxy_url}\"," | tee -a "$DOCKER_CONFIG_FILE" > /dev/null
echo " \"httpsProxy\": \"${proxy_url}\"," | tee -a "$DOCKER_CONFIG_FILE" > /dev/null
echo " \"noProxy\": \"localhost,127.0.0.1,::1\"" | tee -a "$DOCKER_CONFIG_FILE" > /dev/null
echo " }" | tee -a "$DOCKER_CONFIG_FILE" > /dev/null
echo " }" | tee -a "$DOCKER_CONFIG_FILE" > /dev/null
echo "}" | tee -a "$DOCKER_CONFIG_FILE" > /dev/null
echo "✓ Docker client proxy set successfully!"
}
# 取消Docker客户端代理
unset_docker_client_proxy() {
echo "Unsetting Docker client proxy..."
if [[ -f "$DOCKER_CONFIG_FILE" ]]; then
rm -f "$DOCKER_CONFIG_FILE"
echo "✓ Docker client proxy unset successfully!"
else
echo "No Docker client proxy configuration found."
fi
}
# 检查Docker代理状态
check_docker_status() {
echo "==================== Docker Proxy Status ===================="
echo "Docker Daemon Proxy Configuration:"
if [[ -f "$DOCKER_PROXY_CONF" ]]; then
echo " Proxy configuration found."
else
echo " No proxy configuration found."
fi
echo "Docker Client Proxy Configuration:"
if [[ -f "$DOCKER_CONFIG_FILE" ]]; then
cat "$DOCKER_CONFIG_FILE"
else
echo " No client proxy configuration found."
fi
echo "============================================================="
}
# 显示帮助
show_help() {
echo "Docker Proxy Management Script"
echo ""
echo "Usage: $0 [command]"
echo ""
echo "Commands:"
echo " set-daemon Set Docker daemon proxy"
echo " unset-daemon Unset Docker daemon proxy"
echo " set-client Set Docker client proxy"
echo " unset-client Unset Docker client proxy"
echo " status Check Docker proxy settings"
echo " help Show this help messa#!/bin/bash
# Docker 完整代理管理脚本
# 管理Docker的各种代理设置:pull/push、build/run等
# 配置参数
DEFAULT_HTTP_PORT=10808
DEFAULT_HOST="127.0.0.1"
# 配置文件路径
DOCKER_SERVICE_DIR="/etc/systemd/system/docker.service.d"
DOCKER_PROXY_CONF="${DOCKER_SERVICE_DIR}/http-proxy.conf"
DOCKER_CONFIG_DIR="$HOME/.docker"
DOCKER_CONFIG_FILE="${DOCKER_CONFIG_DIR}/config.json"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 获取配置
get_proxy_config() {
local host=${1:-$DEFAULT_HOST}
local port=${2:-$DEFAULT_HTTP_PORT}
echo "http://${host}:${port}"
}
# 检查权限
check_sudo() {
if [[ $EUID -ne 0 ]] && ! sudo -n true 2>/dev/null; then
echo -e "${YELLOW}⚠️ Some operations require sudo privileges.${NC}"
echo " Please ensure you can run sudo commands."
echo
fi
}
# 设置Docker Pull/Push代理(用于拉取推送镜像)
set_docker_pull_push_proxy() {
local proxy_url=$(get_proxy_config)
echo -e "${BLUE}Setting Docker Pull/Push proxy to: ${proxy_url}${NC}"
# 创建目录
if ! sudo mkdir -p "$DOCKER_SERVICE_DIR"; then
echo -e "${RED}❌ Failed to create directory: $DOCKER_SERVICE_DIR${NC}"
return 1
fi
# 写入配置文件
{
echo "[Service]"
echo "Environment=\"HTTP_PROXY=${proxy_url}\""
echo "Environment=\"HTTPS_PROXY=${proxy_url}\""
echo "Environment=\"NO_PROXY=localhost,127.0.0.1,::1\""
} | sudo tee "$DOCKER_PROXY_CONF" > /dev/null
# 重新加载Docker服务
if sudo systemctl daemon-reload && sudo systemctl restart docker; then
echo -e "${GREEN}✓ Docker Pull/Push proxy set successfully!${NC}"
else
echo -e "${RED}❌ Failed to restart Docker service${NC}"
return 1
fi
}
# 取消Docker Pull/Push代理
unset_docker_pull_push_proxy() {
echo -e "${BLUE}Unsetting Docker Pull/Push proxy...${NC}"
if [[ -f "$DOCKER_PROXY_CONF" ]]; then
if sudo rm -f "$DOCKER_PROXY_CONF" && sudo systemctl daemon-reload && sudo systemctl restart docker; then
echo -e "${GREEN}✓ Docker Pull/Push proxy unset successfully!${NC}"
else
echo -e "${RED}❌ Failed to unset Docker Pull/Push proxy${NC}"
return 1
fi
else
echo -e "${YELLOW}No Docker Pull/Push proxy configuration found.${NC}"
fi
}
# 设置Docker Build/Run代理(用于容器内网络访问)
set_docker_build_run_proxy() {
local proxy_url=$(get_proxy_config)
echo -e "${BLUE}Setting Docker Build/Run proxy to: ${proxy_url}${NC}"
# 创建目录
mkdir -p "$DOCKER_CONFIG_DIR"
# 备份现有配置
if [[ -f "$DOCKER_CONFIG_FILE" ]]; then
cp "$DOCKER_CONFIG_FILE" "${DOCKER_CONFIG_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
fi
# 创建或更新配置文件
cat > "$DOCKER_CONFIG_FILE" << EOF
{
"proxies": {
"default": {
"httpProxy": "${proxy_url}",
"httpsProxy": "${proxy_url}",
"noProxy": "localhost,127.0.0.1,::1"
}
}
}
EOF
if [[ $? -eq 0 ]]; then
echo -e "${GREEN}✓ Docker Build/Run proxy set successfully!${NC}"
else
echo -e "${RED}❌ Failed to set Docker Build/Run proxy${NC}"
return 1
fi
}
# 取消Docker Build/Run代理
unset_docker_build_run_proxy() {
echo -e "${BLUE}Unsetting Docker Build/Run proxy...${NC}"
if [[ -f "$DOCKER_CONFIG_FILE" ]]; then
# 备份现有配置
cp "$DOCKER_CONFIG_FILE" "${DOCKER_CONFIG_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
# 删除配置文件
if rm -f "$DOCKER_CONFIG_FILE"; then
echo -e "${GREEN}✓ Docker Build/Run proxy unset successfully!${NC}"
else
echo -e "${RED}❌ Failed to unset Docker Build/Run proxy${NC}"
return 1
fi
else
echo -e "${YELLOW}No Docker Build/Run proxy configuration found.${NC}"
fi
}
# 检查Docker代理状态
check_docker_status() {
echo -e "${BLUE}==================== Docker Proxy Status ====================${NC}"
echo
echo -e "${YELLOW}Docker Pull/Push Proxy Configuration:${NC}"
if [[ -f "$DOCKER_PROXY_CONF" ]]; then
echo -e "${GREEN} ✓ Proxy configuration found at: $DOCKER_PROXY_CONF${NC}"
echo " Configuration:"
sudo cat "$DOCKER_PROXY_CONF" | sed 's/^/ /'
else
echo -e "${RED} ❌ No Pull/Push proxy configuration found${NC}"
fi
echo
echo -e "${YELLOW}Docker Build/Run Proxy Configuration:${NC}"
if [[ -f "$DOCKER_CONFIG_FILE" ]]; then
echo -e "${GREEN} ✓ Proxy configuration found at: $DOCKER_CONFIG_FILE${NC}"
echo " Configuration:"
cat "$DOCKER_CONFIG_FILE" | sed 's/^/ /'
else
echo -e "${RED} ❌ No Build/Run proxy configuration found${NC}"
fi
echo
echo -e "${YELLOW}Current Proxy Settings:${NC}"
local proxy_url=$(get_proxy_config)
echo " Proxy URL: $proxy_url"
echo -e "${BLUE}=============================================================${NC}"
}
# 一键设置所有代理
set_all_proxies() {
echo -e "${BLUE}Setting all Docker proxies...${NC}"
echo
if set_docker_pull_push_proxy && set_docker_build_run_proxy; then
echo
echo -e "${GREEN}✓ All Docker proxies set successfully!${NC}"
else
echo
echo -e "${RED}❌ Failed to set some proxies${NC}"
return 1
fi
}
# 一键清除所有代理
unset_all_proxies() {
echo -e "${BLUE}Unsetting all Docker proxies...${NC}"
echo
unset_docker_pull_push_proxy
unset_docker_build_run_proxy
echo
echo -e "${GREEN}✓ All Docker proxies cleared!${NC}"
}
# 显示帮助
show_help() {
echo -e "${BLUE}Docker Proxy Management Script${NC}"
echo
echo "Usage: $0 [command]"
echo
echo "Commands:"
echo " set-pull-push Set Docker Pull/Push proxy"
echo " unset-pull-push Unset Docker Pull/Push proxy"
echo " set-build-run Set Docker Build/Run proxy"
echo " unset-build-run Unset Docker Build/Run proxy"
echo " set-all Set all Docker proxies"
echo " unset-all Unset all Docker proxies"
echo " status Check Docker proxy settings"
echo " help Show this help message"
echo
echo "If no command is provided, interactive mode will start."
}
# 显示交互式菜单
show_menu() {
echo -e "${BLUE}================== Docker 代理管理工具 ==================${NC}"
echo
echo "1. 设置 Pull/Push 代理 (镜像拉取推送)"
echo "2. 取消 Pull/Push 代理"
echo "3. 设置 Build/Run 代理 (容器网络访问)"
echo "4. 取消 Build/Run 代理"
echo "5. 检查代理状态"
echo "6. 一键设置所有代理"
echo "7. 一键清除所有代理"
echo "8. 退出"
echo
echo -e "${BLUE}=======================================================${NC}"
}
# 交互式模式
interactive_mode() {
while true; do
show_menu
echo -n "请选择操作 [1-8]: "
read choice
echo
case $choice in
1) set_docker_pull_push_proxy ;;
2) unset_docker_pull_push_proxy ;;
3) set_docker_build_run_proxy ;;
4) unset_docker_build_run_proxy ;;
5) check_docker_status ;;
6) set_all_proxies ;;
7) unset_all_proxies ;;
8)
echo -e "${GREEN}再见!${NC}"
exit 0
;;
*)
echo -e "${RED}无效选择,请输入 1-8${NC}"
;;
esac
echo
echo -n "按回车键继续..."
read
clear
done
}
# 主程序逻辑
main() {
local cmd="$1"
check_sudo
# 如果没有参数,进入交互式模式
if [[ -z "$cmd" ]]; then
interactive_mode
return
fi
case "$cmd" in
"set-pull-push") set_docker_pull_push_proxy ;;
"unset-pull-push") unset_docker_pull_push_proxy ;;
"set-build-run") set_docker_build_run_proxy ;;
"unset-build-run") unset_docker_build_run_proxy ;;
"set-all") set_all_proxies ;;
"unset-all") unset_all_proxies ;;
"status") check_docker_status ;;
"help") show_help ;;
*)
echo -e "${RED}Error: Unknown command '$cmd'${NC}"
echo
show_help
exit 1
;;
esac
}
# 执行主程序
main "$@"ge"
}
# 主程序逻辑
main() {
local cmd="$1"
check_sudo
case "$cmd" in
"set-daemon") set_docker_daemon_proxy ;;
"unset-daemon") unset_docker_daemon_proxy ;;
"set-client") set_docker_client_proxy ;;
"unset-client") unset_docker_client_proxy ;;
"status") check_docker_status ;;
"help") show_help ;;
*)
echo "Error: Unknown command '$cmd'"
echo ""
show_help
exit 1
;;
esac
}
# 执行主程序
main "$@"
替换 Shell
安装 zsh
sudo apt install zsh
安装 oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
安装完成后会提示替换当前用户的 shell
为 zsh
,也可以通过下面的命令来设置默认 shell
,完成后的配置文件为 .zshrc
chsh -s /bin/zsh
安装插件管理器
使用 Antigen 来管理 zsh 的插件,首先安装:
curl -L git.io/antigen > antigen.zsh
# or use git.io/antigen-nightly for the latest version
配置文件
清空 .zshrc
文件,重新输入下面的内容:
source $HOME/antigen.zsh
antigen use oh-my-zsh
antigen bundle git
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-completions
antigen theme robbyrussell
antigen apply
评论