ป้ายกำกับ: Google Fonts

Shell script: ติดตั้งฟอนต์ใน macOS, LinuxShell script: ติดตั้งฟอนต์ใน macOS, Linux

PowerShell ที่ช่วยในการติดตั้ง ฟอนต์แห่งชาติ (13 ตัวดั้งเดิม + ปรับปรุง) หรือฟอนต์ อื่น ๆ ที่อยู่ในรายชื่อให้ windows โดยอัตโนมัติ หรือจะใส่ fonts ใน folder fonts ไว้ก็ได้ เพื่อติดตั้งในหลาย ๆ เครื่องได้ง่าย ๆ โดยจะโหลดมาจาก Google Fonts
install_fonts_from_google_fonts.sh

#!/bin/bash

# ====================================================
# SYNOPSIS
# Download and Install Google Fonts for macOS/Linux
# - Auto-checks for Root (Sudo)
# - Options: Cache to Local, Fixed Path, or No Cache
# Author: pitt phunsanit (pitt.plusmagi.com)
# ====================================================

# --- COLORS ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
GRAY='\033[0;90m'
NC='\033[0m' # No Color

# --- 0. ROOT CHECK ---
if [ "$EUID" -ne 0 ]; then
 echo -e "${RED}Please run as root (use sudo).${NC}"
 echo "Usage: sudo ./install_fonts.sh"
 exit
fi

# --- 1. DETECT OS & SET INSTALL PATH ---
OS_TYPE=""
INSTALL_DIR=""

if [[ "$OSTYPE" == "darwin"* ]]; then
 OS_TYPE="macOS"
 INSTALL_DIR="/Library/Fonts"
else
 OS_TYPE="Linux"
 # Create a specific directory for these fonts to keep it clean
 INSTALL_DIR="/usr/share/fonts/google-thai-fonts"
fi

# --- 2. SETUP PATHS & MENU ---
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
USB_FONTS_PATH="$SCRIPT_DIR/Fonts"
FIXED_FONTS_PATH="/opt/portables/Fonts" # Linux/Mac equivalent convention
CACHE_DIR=""
SHOULD_CLEANUP=false

clear
echo -e "${CYAN}====================================================${NC}"
echo -e "${CYAN}  GOOGLE FONTS INSTALLER UTILITY ($OS_TYPE)${NC}"
echo -e "${CYAN}  Author: pitt phunsanit (pitt.plusmagi.com)${NC}"
echo -e "${CYAN}====================================================${NC}"

echo -e "Select Download/Cache Destination:"
echo -e "[1] Current Location : ${YELLOW}$USB_FONTS_PATH${NC}"
echo -e "[2] Fixed Path  : ${GRAY}$FIXED_FONTS_PATH${NC}"
echo -e "[3] No Cache   : ${RED}(Temp & Delete)${NC}"

read -p "Select [1], [2] or [3] (Default is 1): " choice

# Logic to set directory
if [ "$choice" == "2" ]; then
 CACHE_DIR="$FIXED_FONTS_PATH"
elif [ "$choice" == "3" ]; then
 CACHE_DIR=$(mktemp -d)
 SHOULD_CLEANUP=true
else
 CACHE_DIR="$USB_FONTS_PATH"
fi

# --- 3. CONFIGURATION ---
FONTS=(
 "Bai+Jamjuree"
 "Chakra+Petch"
 "Charm"
 "Charmonman"
 "Fah+Kwang"
 "K2D"
 "Kodchasan"
 "KoHo"
 "Krub"
 "Maitree"
 "Mali"
 "Niramit"
 "Sarabun"
 "Srisakdi"
 "Taviraj"
 "Thasadith"
)

# --- 4. START PROCESS ---

# Create Directory
if [ ! -d "$CACHE_DIR" ]; then
 mkdir -p "$CACHE_DIR"
 echo -e "${CYAN}Created working folder at: $CACHE_DIR${NC}"
else
 echo -e "${CYAN}Using working folder at: $CACHE_DIR${NC}"
fi

# Check for unzip tool
if ! command -v unzip &> /dev/null; then
 echo -e "${RED}Error: 'unzip' is not installed. Please install it first.${NC}"
 exit 1
fi

echo ""
# Download & Extract Loop
for font in "${FONTS[@]}"; do
 url="https://fonts.google.com/download?family=$font"
 zip_path="$CACHE_DIR/$font.zip"
 
 # Check Cache
 if [ -f "$zip_path" ]; then
  echo -e "${GRAY}[$font] Found in cache. Skipping download.${NC}"
 else
  echo -e "${YELLOW}[$font] Downloading...${NC}"
  # curl -L (follow redirects) -o (output file) -s (silent) -w (write status)
  if curl -L -o "$zip_path" "$url" --fail --silent; then
   echo -e "${GREEN}[$font] Download completed.${NC}"
  else
   echo -e "${RED}[$font] Error downloading.${NC}"
   continue
  fi
 fi

 # Extract
 # -o (overwrite) -d (destination) -j (junk paths/flatten folders if any)
 unzip -o -j -q "$zip_path" -d "$CACHE_DIR" "*.ttf" "*.otf" 2>/dev/null
done

# --- 5. INSTALLATION ---
echo -e "\n${CYAN}Starting Installation to: $INSTALL_DIR${NC}"

# Create install dir if needed (mainly for Linux custom folder)
if [ ! -d "$INSTALL_DIR" ]; then
 mkdir -p "$INSTALL_DIR"
fi

# Copy Fonts
count=0
# Find .ttf and .otf files in Cache Dir
for file in "$CACHE_DIR"/*.{ttf,otf}; do
 [ -e "$file" ] || continue # Handle case if no fonts found
 
 filename=$(basename "$file")
 
 # Check if exists in System
 if [ -f "$INSTALL_DIR/$filename" ]; then
  echo -e "${GRAY}Skipping $filename (Already installed)${NC}"
 else
  echo -e "${YELLOW}Installing $filename ...${NC}"
  cp "$file" "$INSTALL_DIR/"
  chmod 644 "$INSTALL_DIR/$filename" # Ensure readable
  ((count++))
 fi
done

# --- 6. OS SPECIFIC CACHE UPDATE ---
if [ "$OS_TYPE" == "Linux" ]; then
 if [ $count -gt 0 ]; then
  echo -e "${YELLOW}Updating Linux font cache...${NC}"
  fc-cache -f -v "$INSTALL_DIR" > /dev/null
 fi
fi

# --- FINISH ---
echo -e "\n${GREEN}------------------------------------------------${NC}"

if [ "$SHOULD_CLEANUP" = true ]; then
 echo -e "${RED} Cleaning up temporary files...${NC}"
 rm -rf "$CACHE_DIR"
 echo -e "${GREEN} Temp folder deleted.${NC}"
else
 echo -e "${CYAN} Fonts stored at: $CACHE_DIR${NC}"
fi

echo -e "${GREEN} Process Completed!${NC}"
echo -e "${GREEN}------------------------------------------------${NC}"

# Add a pause similar to the PowerShell script
sleep 2
  1. สร้างไฟล์ install_fonts_from_google_fonts.sh โดยใช้
    touch install_fonts_from_google_fonts.sh
    บน Desktop หรือจะใส่ใน USB เลยก็ได้
  2. ใส่เนื้อหาตามที่เห็นด้านบน
  3. ถ้าต้องการเปลี่ยน fonts ก็ให้เปลี่ยนแปลงใน $fontList
  4. บันทึกไฟล์

การใช้งาน

  1. ไปที่เมนูของ windows ช่องค้นหา พิมพ์ powershell
  2. พิมพ์ cd ตามด้วย folder ที่ save install_fonts_from_google_fonts.sh เช่น
    /Volumes/Untitled/Fonts
  3. set permission
    sudo chmod +x install_fonts_from_google_fonts.sh
  4. ใช้โดยพิมพ์
    sudo ./install_fonts_from_google_fonts.sh
  5. ทำตามขั้นตอนไปเรื่อย ๆ

อ่านเพิ่มเติม