在運行命令前顯示代理設置

Home PDF

prexec

在中國生活或在需要使用VPN和代理的公司工作,可能會使軟件開發變得複雜。忘記配置這些設置通常會導致連接問題。為了簡化您的工作流程,我在ChatGPT的幫助下創建了一個簡單的Zsh腳本,當您運行特定的依賴網絡的命令時,該腳本會自動顯示您的代理設置。

為什麼要顯示代理設置?

代理和VPN對於安全訪問外部資源至關重要。在執行依賴網絡的命令之前顯示您的代理設置,可以幫助您快速識別和解決連接問題。

腳本

這個腳本利用Zsh的preexec函數來檢查即將執行的命令是否依賴網絡。如果是並且設置了代理環境變量,它將顯示當前的代理設置。

# 函數用於在執行某些命令之前檢查並顯示代理設置
preexec() {
    # 定義依賴網絡的命令
    local network_commands=(
        "gpa"
        "git"
        "ssh"
        "scp"
        "sftp"
        "rsync"
        "curl"
        "wget"
        "apt"
        "yum"
        "dnf"
        "npm"
        "yarn"
        "pip"
        "pip3"
        "gem"
        "cargo"
        "docker"
        "kubectl"
        "ping"
        "traceroute"
        "netstat"
        "ss"
        "ip"
        "ifconfig"
        "dig"
        "nslookup"
        "nmap"
        "telnet"
        "ftp"
        "nc"
        "tcpdump"
        "adb"
        "bundle"
        "brew"
        "cpanm"
        "bundle exec jekyll"
        "make"
        # 根據需要添加更多命令
    )

    # 從命令行中提取第一個單詞(命令)
    local cmd
    cmd=$(echo "$1" | awk '{print $1}')

    # 函數用於顯示代理變量
    display_proxy() {
        echo -e "\n🚀 檢測到代理設置:"

        [ -n "$HTTP_PROXY" ] && echo "   - HTTP_PROXY: $HTTP_PROXY"
        [ -n "$http_proxy" ] && echo "   - http_proxy: $http_proxy"
        [ -n "$HTTPS_PROXY" ] && echo "   - HTTPS_PROXY: $HTTPS_PROXY"
        [ -n "$https_proxy" ] && echo "   - https_proxy: $https_proxy"
        [ -n "$ALL_PROXY" ] && echo "   - ALL_PROXY: $ALL_PROXY"
        [ -n "$all_proxy" ] && echo "   - all_proxy: $all_proxy"

        echo ""
    }

    # 檢查命令是否依賴網絡
    for network_cmd in "${network_commands[@]}"; do
        if [[ "$1" == "$network_cmd"* ]]; then
            if [ -n "$HTTP_PROXY" ] || [ -n "$http_proxy" ] || \
               [ -n "$HTTPS_PROXY" ] || [ -n "$https_proxy" ] || \
               [ -n "$ALL_PROXY" ] || [ -n "$all_proxy" ]; then
                
                display_proxy
            fi
            break
        fi
    done
}

在Zsh中設置腳本

1. 打開您的.zshrc文件

使用您喜歡的文本編輯器打開.zshrc配置文件。例如:

nano ~/.zshrc

2. 添加preexec函數

將上面的腳本粘貼到文件的末尾。

3. 保存並關閉

CTRL + O保存,然後按CTRL + X退出。

4. 應用更改

重新加載您的.zshrc以立即應用新配置:

source ~/.zshrc

測試設置

1. 啟用代理

臨時設置一個代理變量並使用pip運行一個依賴網絡的命令:

export HTTP_PROXY="http://127.0.0.1:7890"
pip install selenium beautifulsoup4 urllib3

預期輸出:


🚀 檢測到代理設置:
   - HTTP_PROXY: http://127.0.0.1:7890
   - http_proxy: 127.0.0.1:7890
   - HTTPS_PROXY: 127.0.0.1:7890
   - https_proxy: 127.0.0.1:7890
   - ALL_PROXY: 127.0.0.1:7890
   - all_proxy: 127.0.0.1:7890

Collecting selenium
  Downloading selenium-4.x.x-py2.py3-none-any.whl (xxx kB)
Collecting beautifulsoup4
  Downloading beautifulsoup4-4.x.x-py3-none-any.whl (xxx kB)
Collecting urllib3
  Downloading urllib3-1.x.x-py2.py3-none-any.whl (xxx kB)
...

2. 未啟用代理

取消設置代理變量並運行相同的pip命令:

unset HTTP_PROXY
pip install selenium beautifulsoup4 urllib3

預期輸出:

Collecting selenium
  Downloading selenium-4.x.x-py2.py3-none-any.whl (xxx kB)
Collecting beautifulsoup4
  Downloading beautifulsoup4-4.x.x-py3-none-any.whl (xxx kB)
Collecting urllib3
  Downloading urllib3-1.x.x-py2.py3-none-any.whl (xxx kB)
...

(不應出現代理通知。)

3. 非網絡命令

運行一個本地命令,如ls

ls

預期輸出:

[文件和目錄列表]

(不應出現代理通知。)

自定義

結論

在受限的網絡環境中,管理代理設置對於順利的軟件開發至關重要。這個Zsh腳本確保您在運行需要網絡訪問的命令時始終了解您的代理配置,從而提高您的工作流程和故障排除效率。

祝您編程愉快!🚀


Back 2025.01.18 Donate