When I first tried setting up `smolpub.sh` I was receiving an error:
readarray: command not found
Instead of installing another dependency, I updated the script to be as follows:
#!/bin/bash host=https://smol.pub validate_post() { arr=() while IFS= read -r line; do arr+=("$line") done < "$1" if [[ "$(echo ${arr[0]} | cut -b-2)" != "# " ]] || [[ "${arr[1]}" != "" ]] then echo "First line needs to start with a title (# Hello World)" echo "Second line needs to be left blank." fi } validate_post $1 if [ $# -eq 1 ] then status=$(curl -s -o /dev/null -w "%{http_code}"\ --form-string title="$(head -1 $1 | cut -b3-)"\ --form-string slug="$1"\ --form-string content="$(tail -n +3 $1)"\ -b smolpub="$(cat ~/.config/.smolpub)"\ $host/posts/save) if [ $status -ne 302 ] then curl --form-string title="$(head -1 $1 | cut -b3-)"\ --form-string slug="$1"\ --form-string content="$(tail -n +3 $1)"\ -b smolpub="$(cat ~/.config/.smolpub)"\ $host/posts/$1/update fi fi
This seemed to solve my problem and unlock publishing from the MacOS command line.
I then created a little shell script so that I could post to my blog with one line:
#!/usr/bin/env bash # Check if two arguments are provided if [ "$#" -ne 2 ]; then echo "Usage: blogpost.sh <slug> <body>" exit 1 fi # Assign arguments to variables for better readability slug=/Users/me/.scripts/$1 body=$2 # Create a new file with the provided slug touch $slug # Write the body into the file echo -e "# $(date +'%Y/%m/%d @ %H:%M')\n\n$body" > $slug # Publish the post bash smolpub.sh $slug # Remove the file # rm /Users/me/.scripts/$slug
Usage:
blogpost.sh my-blog-post "This is a test"
Would create a post with the title being the current date and time, and the body being the string I've passed in.