ลบการอ้างอิงที่ไม่จำเป็นออกจาก 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 (ตามที่คุณต้องค้นพบภายหลังในสคริปต์) นอกจากนี้ฉันไม่ได้เปลี่ยนส่วนนี้ แต่คุณไม่จำเป็นต้องนับจำนวนองค์ประกอบในอาร์เรย์ แทนที่จะเป็น$PackageCountคุณสามารถเข้าถึง${#PackageList}เพื่อรับองค์ประกอบได้โดยตรง
piojo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.