หมวดหมู่: Design

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. ทำตามขั้นตอนไปเรื่อย ๆ

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