عرض إعدادات الوكيل قبل تنفيذ الأوامر

Home PDF

prexec

العيش في الصين أو العمل في شركات تستخدم شبكات VPN والوكلاء (proxies) يمكن أن يعقد عملية تطوير البرمجيات. نسيان تكوين هذه الإعدادات غالبًا ما يؤدي إلى مشاكل في الاتصال. لتبسيط سير العمل الخاص بك، قمت بإنشاء نص برمجي بسيط باستخدام Zsh بمساعدة ChatGPT يعرض تلقائيًا إعدادات الوكيل الخاص بك عند تشغيل أوامر معينة تعتمد على الشبكة.

لماذا عرض إعدادات الوكيل؟

الوكلاء (Proxies) وشبكات VPN ضرورية للوصول إلى الموارد الخارجية بشكل آمن. عرض إعدادات الوكيل الخاص بك قبل تنفيذ الأوامر التي تعتمد على الشبكة يساعدك على تحديد مشكلات الاتصال وحلها بسرعة.

النص البرمجي

هذا النص يستخدم وظيفة preexec في Zsh للتحقق مما إذا كانت الأمر القادم يعتمد على الشبكة. إذا كان الأمر كذلك وتم تعيين متغيرات البيئة للبروكسي، فإنه يعرض إعدادات البروكسي الحالية.

# دالة للتحقق من إعدادات الوكيل وعرضها قبل تنفيذ أوامر معينة
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

(ملاحظة: الأوامر البرمجية مثل nano ~/.zshrc لا تُترجم، حيث أنها أوامر تقنية تُستخدم كما هي في جميع اللغات.)

2. إضافة دالة preexec

الصق النص البرمجي أعلاه في نهاية الملف.

3. حفظ وإغلاق

اضغط CTRL + O لحفظ الملف و CTRL + X للخروج.

4. تطبيق التغييرات

قم بإعادة تحميل ملف .zshrc لتطبيق التكوين الجديد على الفور:

source ~/.zshrc

اختبار الإعدادات

1. مع تفعيل الوكيل (Proxy)

قم بتعيين متغير الوكيل مؤقتًا وتنفيذ أمر يعتمد على الشبكة باستخدام 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

جمع حزمة selenium
  يتم تنزيل selenium-4.x.x-py2.py3-none-any.whl (xxx كيلوبايت)
جمع حزمة beautifulsoup4
  يتم تنزيل beautifulsoup4-4.x.x-py3-none-any.whl (xxx كيلوبايت)
جمع حزمة urllib3
  يتم تنزيل urllib3-1.x.x-py2.py3-none-any.whl (xxx كيلوبايت)
...

2. بدون تفعيل الوكيل (Proxy)

قم بإلغاء تعيين متغير الوكيل (proxy) وقم بتشغيل أمر pip نفسه:

unset HTTP_PROXY
pip install selenium beautifulsoup4 urllib3

الإخراج المتوقع:

جمع selenium
  يتم تنزيل selenium-4.x.x-py2.py3-none-any.whl (xxx كيلوبايت)
جمع beautifulsoup4
  يتم تنزيل beautifulsoup4-4.x.x-py3-none-any.whl (xxx كيلوبايت)
جمع urllib3
  يتم تنزيل urllib3-1.x.x-py2.py3-none-any.whl (xxx كيلوبايت)
...

(لا ينبغي أن تظهر أي إشعارات تتعلق بالوكيل.)

3. أمر غير متعلق بالشبكة

قم بتنفيذ أمر محلي مثل ls:

ls

الإخراج المتوقع:

[قائمة الملفات والدلائل]

(لا ينبغي أن تظهر أي إشعارات تتعلق بالوكيل.)

التخصيص

تم تعيين اسم مستعار (alias) في سطر الأوامر باستخدام الأمر alias، حيث يتم تعيين الأمر gpa ليقوم بتنفيذ git push all. هذا يعني أنه عند كتابة gpa في سطر الأوامر، سيتم تنفيذ git push all تلقائيًا.

أضف "gpa" إلى مصفوفة network_commands لتفعيل إشعارات البروكسي عند استخدام هذا الاسم المستعار.

لتحسين الرؤية، خاصة في المحطات المزدحمة، يمكنك إضافة لون إلى إشعارات الوكيل:

  # أضف رموز الألوان في أعلى ملف .zshrc الخاص بك
  GREEN='\033[0;32m'
  NC='\033[0m' # بدون لون

display_proxy() { echo -e “\n${GREEN}🚀 تم الكشف عن إعدادات البروكسي:${NC}”

[ -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 ""   }   ```

الخلاصة

إدارة إعدادات الوكيل (Proxy) أمر بالغ الأهمية لتطوير البرمجيات بسلاسة في بيئات الشبكات المقيدة. يضمن هذا النص البرمجي لـ Zsh أن تكون دائمًا على علم بإعدادات الوكيل الخاصة بك عند تشغيل الأوامر التي تتطلب الوصول إلى الشبكة، مما يعزز من سير عملك وكفاءة استكشاف الأخطاء وإصلاحها.

برمجة سعيدة! 🚀


Back 2025.01.18 Donate