Rimuovere le dipendenze non necessarie da Cygwin


15

In Cygwin quando installo un nuovo pacchetto installa automaticamente tutte le dipendenze necessarie per quel pacchetto.

Successivamente, se scelgo di rimuovere quel pacchetto, come posso rimuovere le dipendenze che ha installato con esso, che non sono più necessarie?

Risposte:


8

Bene, ecco la mia attuale soluzione che mi è venuta in mente. Utilizzando la mia (molto) limitata conoscenza di bash e 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

Mi piacerebbe vedere se qualcuno ha una soluzione migliore o qualche consiglio per migliorare la mia sceneggiatura.


Non so se sei ancora sul sito, ma ho modificato il tuo script per correggere un N=$N+1errore - in bash, questo creerà effettivamente una stringa anziché matematica. Circondare la dichiarazione in (( ))ti permette di fare la vera matematica in bash (come avrai scoperto più avanti nello script). Inoltre, non ho modificato questa parte, ma non è necessario tenere un conteggio del numero di elementi in un array. Invece di $PackageCount, è possibile accedere ${#PackageList}per ottenere direttamente il numero di elementi.
Piojo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.