11#! /bin/bash
2+ # macOS-compatible: use sed instead of grep -Po
3+ # alternatively use brew to install and manage fzf
24set -e
35
46# --- Optional colours ---
1315 NC=" \033[0m"
1416fi
1517
16- # --- Step 1: Get current fzf version ---
18+ # --- Get current fzf version ---
1719echo -e " ${CYAN} Current fzf version:${NC} "
1820CURRENT_VERSION=" "
1921if command -v fzf > /dev/null 2>&1 ; then
2022 CURRENT_VERSION_FULL=$( fzf --version)
2123 echo " $CURRENT_VERSION_FULL "
2224 # Extract version number (e.g., "0.56.3 (brew)" -> "0.56.3")
23- CURRENT_VERSION=$( echo " $CURRENT_VERSION_FULL " | grep -Po ' ^ [0-9]+\.[0-9]+\.[0-9]+' )
25+ CURRENT_VERSION=$( echo " $CURRENT_VERSION_FULL " | sed -E ' s/^( [0-9]+\.[0-9]+\.[0-9]+).*/\1/ ' )
2426else
2527 echo -e " ${YELLOW} fzf not currently installed.${NC} "
2628fi
2729echo
2830
29- # --- Step 2: Fetch latest release via GitHub API ---
31+ # --- Fetch latest release via GitHub API ---
3032echo -e " ${GREEN} Fetching latest fzf release...${NC} "
31-
3233API_URL=" https://api.github.com/repos/junegunn/fzf/releases/latest"
3334
3435if command -v jq > /dev/null 2>&1 ; then
3536 # Use jq if available
3637 RELEASE_DATA=$( curl -Ls " $API_URL " )
3738 LATEST_VERSION=$( echo " $RELEASE_DATA " | jq -r ' .tag_name' | sed ' s/^v//' )
3839else
39- # Fallback: parse JSON with grep/ sed
40+ # Fallback: parse JSON with sed (macOS-compatible)
4041 RELEASE_DATA=$( curl -Ls " $API_URL " )
41- LATEST_VERSION=$( echo " $RELEASE_DATA " | grep -Po ' "tag_name":\s*"\K [^"]+ ' | sed ' s/^v// ' )
42+ LATEST_VERSION=$( echo " $RELEASE_DATA " | sed -n ' s/.* "tag_name"[[:space:]]*:[[:space:]]*"v\{0,1\}\( [^"]*\)".*/\1/p ' | head -n 1 )
4243fi
4344
4445if [ -z " $LATEST_VERSION " ]; then
4950echo -e " ${CYAN} Latest stable version:${NC} ${LATEST_VERSION} "
5051echo
5152
52- # --- Step 3: Compare versions ---
53+ # --- Compare versions ---
5354if [ " $CURRENT_VERSION " = " $LATEST_VERSION " ]; then
5455 echo -e " ${GREEN} You already have the latest version (${LATEST_VERSION} ) installed!${NC} "
5556 echo -e " ${YELLOW} No update needed.${NC} "
6465fi
6566echo
6667
67- # --- Step 4: Install/Upgrade fzf ---
68+ # --- Install/Upgrade fzf ---
6869INSTALL_DIR=" $HOME /.fzf"
6970
7071# Remove existing installation if it exists
@@ -81,7 +82,7 @@ git clone --depth 1 --branch "v${LATEST_VERSION}" https://github.com/junegunn/fz
8182echo -e " ${GREEN} Running fzf installation script...${NC} "
8283" $INSTALL_DIR /install" --key-bindings --completion --no-update-rc
8384
84- # --- Step 5: Verify ---
85+ # --- Verify ---
8586echo
8687echo -e " ${MAGENTA} fzf upgraded successfully!${NC} "
8788echo
0 commit comments