Cygwin'de yeni bir paket yüklediğimde, bu paket için gereken bağımlılıkları otomatik olarak yükler.
Daha sonra bu paketi kaldırmayı seçersem, onunla birlikte yüklenen ve artık gerekli olmayan bağımlılıkları nasıl kaldırabilirim?
Cygwin'de yeni bir paket yüklediğimde, bu paket için gereken bağımlılıkları otomatik olarak yükler.
Daha sonra bu paketi kaldırmayı seçersem, onunla birlikte yüklenen ve artık gerekli olmayan bağımlılıkları nasıl kaldırabilirim?
Yanıtlar:
İşte benim şimdiki çözümüm. (Çok) sınırlı bash ve Google bilgimi kullanıyorum.
#!/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
Herkes daha iyi bir çözüm ya da benim senaryo geliştirmek için herhangi bir ipucu olup olmadığını görmek isterim.
N=$N+1
hatayı düzeltmek için komut dosyanızı düzenledim - bash'da, bu aslında matematik yerine bir dize oluşturacak. İfadeyi(( ))
çevrelemek, bash'de gerçek matematik yapmanıza izin verir (komut dosyasında daha sonra keşfetmiş olmanız gerektiği gibi). Ayrıca, bu kısmı değiştirmedim, ancak bir dizideki elemanların sayısını tutmanıza gerek yok. Bunun yerine, elemanların sayısını doğrudan almak için$PackageCount
erişebilirsiniz${#PackageList}
.