Entfernen Sie nicht benötigte Abhängigkeiten von Cygwin


15

Wenn ich in Cygwin ein neues Paket installiere, werden automatisch alle für dieses Paket erforderlichen Abhängigkeiten installiert.

Wie kann ich später, wenn ich dieses Paket entfernen möchte, die damit installierten Abhängigkeiten entfernen, die nicht mehr benötigt werden?

Antworten:


8

Nun, hier ist meine aktuelle Lösung, die ich mir ausgedacht habe. Nutzung meiner (sehr) eingeschränkten Kenntnisse in Bash und Google.

#!/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

Ich würde gerne sehen, ob jemand eine bessere Lösung oder Tipps zur Verbesserung meines Skripts hat.


Ich weiß nicht, ob Sie noch auf der Website sind, aber ich habe Ihr Skript bearbeitet, um einen N=$N+1Fehler zu beheben. In Bash wird hierdurch tatsächlich eine Zeichenfolge erstellt und keine mathematische. Wenn Sie die Anweisung in (( ))einschließen, können Sie echte Mathematik in Bash ausführen (wie Sie später im Skript festgestellt haben müssen). Außerdem habe ich diesen Teil nicht geändert, aber Sie müssen die Anzahl der Elemente in einem Array nicht zählen. Stattdessen $PackageCountkönnen Sie ${#PackageList}direkt auf zugreifen , um die Anzahl der Elemente abzurufen.
Piojo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.