Cygwin से अनावश्यक निर्भरताएं निकालें


15

साइगविन में जब मैं एक नया पैकेज स्थापित करता हूं तो यह स्वचालित रूप से उस पैकेज के लिए आवश्यक किसी भी निर्भरता को स्थापित करता है।

बाद में अगर मैं उस पैकेज को निकालना चाहता हूं, तो मैं उसके साथ स्थापित की गई निर्भरता को कैसे दूर कर सकता हूं, जिसकी अब आवश्यकता नहीं है?

जवाबों:


8

खैर, यहाँ मेरा वर्तमान समाधान है जिसके साथ मैं आया था। बाश और गूगल के मेरे (बहुत) सीमित ज्ञान का उपयोग करना।

#!/bin/bash
# Print a list of packages that no other package depends on

PackageCount=0
PackageIter=0

# Populate package array
declare -A Packages
PackageList=$(cygcheck.exe -c | cut -d' ' -f1 | tail -n +3)
for P in $PackageList; do
    Packages[${P,,}]=0
    ((PackageCount++))
done

# Determine the last mirror used
LastMirror=$(sed -n '/last-mirror/{n;p}' /etc/setup/setup.rc | tr -d '\t')
echo "[DEBUG] LastMirror = $LastMirror"

# Download the setup.ini file from the mirror server
echo "[DEBUG] Downloading setup.ini from mirror"
if which bzcat &>/dev/null; then
    wget --quiet "${LastMirror}$(uname -m)/setup.bz2" -O - | bzcat > setup.ini
else
    wget --quiet "${LastMirror}$(uname -m)/setup.ini" -O setup.ini
fi

for P in $PackageList; do
    ((PackageIter++))
    echo -ne "[DEBUG] Processing packages $((PackageIter * 100 / PackageCount))%\r"

    deps=$(sed -n "/^@ $P$/,/^requires/p" setup.ini | grep -i '^requires' | cut -d' ' -f2-)

    for dep in $deps; do
        if [[ ${Packages[${dep,,}]} ]]; then
            Packages[${dep,,}]=$((Packages[${dep,,}]+1))
        fi
    done
done

echo -e "\n== Packages =="

for P in $PackageList; do
    if [[ ${Packages[${P,,}]} == 0 ]]; then
        echo $P
    fi
done

rm setup.ini

मुझे यह देखना अच्छा लगेगा कि किसी के पास बेहतर समाधान है, या मेरी स्क्रिप्ट को बेहतर बनाने के लिए कोई सुझाव है।


मुझे नहीं पता कि आप अभी भी साइट पर हैं, लेकिन मैंने एक N=$N+1त्रुटि को ठीक करने के लिए आपकी स्क्रिप्ट को संपादित किया है - बाश में, यह वास्तव में गणित के बजाय एक स्ट्रिंग बनाएगा। कथन को चारों ओर से घेरने में (( ))आपको वास्तविक गणित करने में मदद मिलती है (जैसा कि आपने बाद में स्क्रिप्ट में खोजा होगा)। इसके अलावा, मैंने इस भाग को नहीं बदला है, लेकिन आपको किसी सरणी में तत्वों की संख्या को ध्यान में रखने की आवश्यकता नहीं है। इसके बजाय $PackageCount, आप ${#PackageList}सीधे तत्वों की संख्या प्राप्त करने के लिए उपयोग कर सकते हैं।
piojo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.