Cygwin에서 불필요한 종속성 제거


15

Cygwin에서 새 패키지를 설치하면 해당 패키지에 필요한 모든 종속성이 자동으로 설치됩니다.

나중에 해당 패키지를 제거하기로 선택하면 더 이상 필요하지 않은 패키지와 함께 설치된 종속성을 어떻게 제거 할 수 있습니까?

답변:


8

글쎄, 여기에 내가 생각해 낸 나의 현재 해결책이 있습니다. bash와 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

누군가 더 나은 솔루션을 가지고 있는지, 또는 스크립트를 개선하기위한 팁이 있는지 알고 싶습니다.


사이트에 아직 있는지 모르겠지만 N=$N+1오류 를 수정하기 위해 스크립트를 편집 했습니다 .bash에서 실제로 수학 대신 문자열을 만듭니다. 명령문을 둘러싸면 (( ))bash에서 실제 수학을 수행 할 수 있습니다 (나중에 스크립트에서 발견 했음). 또한이 부분을 변경하지는 않았지만 배열의 요소 수를 유지할 필요는 없습니다. 대신에 요소 수를 직접 얻기 위해 $PackageCount액세스 ${#PackageList}할 수 있습니다.
piojo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.