ollie/data/tools/_lib/args.sh

64 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Shared argument parsing for bash tool scripts.
# Tools receive a JSON object on stdin.
#
# Usage:
# source "${OLLIE_TOOLS_PATH:-$(dirname "$0")}/_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"
}