parse-frontmatter.sh 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/bin/bash
  2. # Frontmatter Parser Utility
  3. # Extracts YAML frontmatter from .local.md files
  4. set -euo pipefail
  5. # Usage
  6. show_usage() {
  7. echo "Usage: $0 <settings-file.md> [field-name]"
  8. echo ""
  9. echo "Examples:"
  10. echo " # Show all frontmatter"
  11. echo " $0 .claude/my-plugin.local.md"
  12. echo ""
  13. echo " # Extract specific field"
  14. echo " $0 .claude/my-plugin.local.md enabled"
  15. echo ""
  16. echo " # Extract and use in script"
  17. echo " ENABLED=\$($0 .claude/my-plugin.local.md enabled)"
  18. exit 0
  19. }
  20. if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
  21. show_usage
  22. fi
  23. FILE="$1"
  24. FIELD="${2:-}"
  25. # Validate file
  26. if [ ! -f "$FILE" ]; then
  27. echo "Error: File not found: $FILE" >&2
  28. exit 1
  29. fi
  30. # Extract frontmatter
  31. FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$FILE")
  32. if [ -z "$FRONTMATTER" ]; then
  33. echo "Error: No frontmatter found in $FILE" >&2
  34. exit 1
  35. fi
  36. # If no field specified, output all frontmatter
  37. if [ -z "$FIELD" ]; then
  38. echo "$FRONTMATTER"
  39. exit 0
  40. fi
  41. # Extract specific field
  42. VALUE=$(echo "$FRONTMATTER" | grep "^${FIELD}:" | sed "s/${FIELD}: *//" | sed 's/^"\(.*\)"$/\1/' | sed "s/^'\\(.*\\)'$/\\1/")
  43. if [ -z "$VALUE" ]; then
  44. echo "Error: Field '$FIELD' not found in frontmatter" >&2
  45. exit 1
  46. fi
  47. echo "$VALUE"
  48. exit 0