64 lines
1.4 KiB
Bash
Executable File
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"
|
|
}
|