Category Archive Network

Byphunsanit

Homebrew: update script

เหมือนบทความ Winget: update script ที่ต้องการ update program ใน mac แต่ก็ไม่อยากไป upgrade ตัว version เล็ก ๆ น้อย ๆ หลักที่ 3 อยากจะอัพเดตเฉพาะ major / minor version

brew_update_major_minor_change.sh ( Download )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
 
# Function to compare versions
version_compare() {
    local IFS=.
    local version1=($1) version2=($2)
     
    # Compare major and minor versions only
    for ((i=0; i<2; i++)); do
        if [ "${version1[$i]:-0}" -gt "${version2[$i]:-0}" ]; then
            return 1
        elif [ "${version1[$i]:-0}" -lt "${version2[$i]:-0}" ]; then
            return 2
        fi
    done
    return 0
}
 
echo "Checking for updates..."
 
# Get list of outdated packages with versions
brew outdated --verbose | while read -r line; do
    if [[ $line =~ (.*)[[:space:]]([0-9]+\.[0-9]+\.[0-9]+).*[[:space:]]([0-9]+\.[0-9]+\.[0-9]+) ]]; then
        package="${BASH_REMATCH[1]}"
        current="${BASH_REMATCH[2]}"
        latest="${BASH_REMATCH[3]}"
         
        # Compare versions
        version_compare "$current" "$latest"
        result=$?
         
        if [ $result -eq 2 ]; then
            echo "Upgrading $package from $current to $latest"
            brew upgrade "$package"
        else
            echo "Skipping $package (no major/minor version change)"
        fi
    fi
done
 
echo "Update check complete!"
  1. ให้สิทธิ์ในการ run ครั้งแรก โดยคำสั่ง
    chmod +x ./brew_update_major_minor_change.sh
  2. เรียกใช้โดยคำสั่ง
    ./brew_update_major_minor_change.sh