A utility to make command-line shell args easy to use. (I should have called it "cli-sh-ez-args", but that seemed cumbersome.)
npm install -g cli-shezargs
And then:
#!/bin/bash -e
eval "$(cli-shezargs $@)"
Which parses your command-line args and creates bash variables (see below.)
For example, --foo=bar
will get you:
foo=bar
I always hated the boiler plate at the top of all of my shell scripts:
#!/bin/bash -e
# Helper functions
die() {
echo "$@"
exit 1
}
# ...
# parse args
for param in "$@"; do
case $param in
--service=*)
service="${param#*=}"
;;
# ...
esac
done
# ...
Now, I can just:
#!/bin/bash -e
# parse args and setup common functions
eval "$(cli-shezargs $@)"
# ...
The main benefit is that you will have variables set for each command-line
argument. But you also get die()
and some other functions.
# "--foo=quxx" becomes
foo="quxx"
# and "beanie --foo-be=bar baby --foo-it --baz- --foo=quxx -- --not-an-arg" becomes
foo_be="bar"
foo_it="1"
unset baz
foo="quxx"
set -- "beanie" "baby" "--not-an-arg"
That last line has the effect of setting $1 to "beanie", $2 to "baby",
Look at scripts/common.sh
for the functions that you will have. Modify and submit a PR to add your favorites. :)
# Easiest -- parses args and add helper functions from `scripts/common.sh`
eval "$(cli-shezargs $@)"
# Include file support
eval "$(cli-shezargs __f $$ $0 $@)"
# Really the easiest -- just gives scripts
eval "$(cli-shezargs)"
File support gets you:
TMP_DIR
,TMP_FILE
,LOG_FILE
, andJSON_FILE
, which are set to newly-created temp files (in/tmp/...
and using the PID to guarantee uniqueness).script_dir
-- the dir for the bash script.
You must have Node.js, and then:
Install:
npm install -g cli-shezargs
Put this snippet at the top of your scripts:
eval "$(cli-shezargs $@)"
And then use --this-style-of=command --line- --args