#!/usr/bin/env bash # Shared argument parsing for bash tool scripts. # Tools receive a JSON object on stdin. # # Usage: # source "${XDG_CONFIG_HOME:-$HOME/.config}/ollie/tools/_lib/args.sh" # path=$(arg_require "path") # start=$(arg_get "start" "") # # Requires: jq # Read stdin JSON into a variable (once) _ARGS_JSON=$(cat) [ -z "$_ARGS_JSON" ] && _ARGS_JSON='{}' # Get a required argument. Exits with error if missing/null. arg_require() { local key="$1" local val val=$(echo "$_ARGS_JSON" | jq -r --arg k "$key" '.[$k] // empty') if [ -z "$val" ]; then echo "error: missing required argument: $key" >&2 exit 1 fi echo "$val" } # Get an optional argument with default. arg_get() { local key="$1" local default="${2:-}" local val val=$(echo "$_ARGS_JSON" | jq -r --arg k "$key" '.[$k] // empty') if [ -z "$val" ]; then echo "$default" else echo "$val" fi } # Get a boolean argument (returns "true" or "false"). arg_bool() { local key="$1" local default="${2:-false}" local val val=$(echo "$_ARGS_JSON" | jq -r --arg k "$key" '.[$k] // empty') case "$val" in true|1|yes) echo "true" ;; false|0|no|"") echo "$default" ;; *) echo "$default" ;; esac } # Get raw JSON value for a key. arg_json() { local key="$1" echo "$_ARGS_JSON" | jq --arg k "$key" '.[$k]' } # Get the full raw JSON. arg_raw() { echo "$_ARGS_JSON" }