diff options
author | Brian Mattern <rephorm@rephorm.com> | 2012-09-11 22:21:21 -0700 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2012-09-12 12:38:48 +0200 |
commit | 2ac8b6577f806b8bd4cbc103d2837ebed68f6778 (patch) | |
tree | c36b5d548bf22f4df95ef6aaf5b6d2076f10b877 | |
parent | 3a0c8bae77a15976f6b74ed92d57127f7d6cdca6 (diff) |
Use getopt to regularize options
I like being able to specify command line options (like -c) at the end
of the line (which is usually when I think of the fact that I need
them).
The attached patch uses getopt(1) to regularize the option list so that
lazy people like me can specify the options in any order.
-rw-r--r-- | README | 1 | ||||
-rwxr-xr-x | src/password-store.sh | 62 |
2 files changed, 36 insertions, 27 deletions
@@ -18,3 +18,4 @@ Depends on: - xclip - pwgen - tree +- GNU getopt diff --git a/src/password-store.sh b/src/password-store.sh index a89be8d..f9e13e4 100755 --- a/src/password-store.sh +++ b/src/password-store.sh @@ -115,10 +115,20 @@ fi case "$command" in show|ls|list) clip=0 - if [[ $1 == "--clip" || $1 == "-c" ]]; then - clip=1 - shift + + opts="$(getopt -o c -l clip -n $program -- "$@")" + err=$? + eval set -- "$opts" + while true; do case $1 in + -c|--clip) clip=1; shift ;; + --) shift; break ;; + esac done + + if [[ $err -ne 0 ]]; then + echo "Usage: $program $command [--clip,-c] [pass-name]" + exit 1 fi + path="$1" if [[ -d $PREFIX/$path ]]; then if [[ $path == "" ]]; then @@ -143,18 +153,17 @@ case "$command" in insert) ml=0 noecho=0 - while true; do - if [[ $1 == "--multiline" || $1 == "-m" ]]; then - ml=1 - shift - elif [[ $1 == "--no-echo" || $1 == "-n" ]]; then - noecho=1 - shift - else - break - fi - done - if [[ ( $ml -eq 1 && $noecho -eq 1 ) || $# -ne 1 ]]; then + + opts="$(getopt -o mn -l multiline,no-echo -n $program -- "$@")" + err=$? + eval set -- "$opts" + while true; do case $1 in + -m|--multiline) ml=1; shift ;; + -n|--no-echo) noecho=1; shift ;; + --) shift; break ;; + esac done + + if [[ $err -ne 0 || ( $ml -eq 1 && $noecho -eq 1 ) || $# -ne 1 ]]; then echo "Usage: $program $command [--no-echo,-n | --multiline,-m] pass-name" exit 1 fi @@ -241,18 +250,17 @@ case "$command" in generate) clip=0 symbols="-y" - while true; do - if [[ $1 == "--no-symbols" || $1 == "-n" ]]; then - symbols="" - shift - elif [[ $1 == "--clip" || $1 == "-c" ]]; then - clip=1 - shift - else - break - fi - done - if [[ $# -ne 2 ]]; then + + opts="$(getopt -o nc -l no-symbols,clip -n $program -- "$@")" + err=$? + eval set -- "$opts" + while true; do case $1 in + -n|--no-symbols) symbols=""; shift ;; + -c|--clip) clip=1; shift ;; + --) shift; break ;; + esac done + + if [[ $err -ne 0 || $# -ne 2 ]]; then echo "Usage: $program $command [--no-symbols,-n] [--clip,-c] pass-name pass-length" exit 1 fi |