উত্তর:
ঠিক আছে, এখানে আমার বর্তমান সমাধানটি নিয়ে এসেছি। বাশ এবং গুগল সম্পর্কে আমার (খুব) সীমিত জ্ঞান ব্যবহার করা।
#!/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
ত্রুটি সমাধানের জন্য আমি আপনার স্ক্রিপ্ট সম্পাদনা করেছি - ব্যাশে এটি গণিতের পরিবর্তে একটি স্ট্রিং তৈরি করবে। বিবৃতিটিকে চারপাশে ঘনিয়ে দেওয়া(( ))
আপনাকে বাশে আসল গণিত করতে দেয় (যেমন আপনি অবশ্যই স্ক্রিপ্টে পরে আবিষ্কার করেছেন)। এছাড়াও, আমি এই অংশটি পরিবর্তন করি নি, তবে আপনাকে অ্যারেতে উপাদানগুলির সংখ্যা গণনা করার দরকার নেই। পরিবর্তে$PackageCount
, আপনি${#PackageList}
সরাসরি উপাদান সংখ্যা পেতে অ্যাক্সেস করতে পারেন।