m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Mattern <rephorm@rephorm.com>2012-09-11 22:21:21 -0700
committerJason A. Donenfeld <Jason@zx2c4.com>2012-09-12 12:38:48 +0200
commit2ac8b6577f806b8bd4cbc103d2837ebed68f6778 (patch)
treec36b5d548bf22f4df95ef6aaf5b6d2076f10b877
parent3a0c8bae77a15976f6b74ed92d57127f7d6cdca6 (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--README1
-rwxr-xr-xsrc/password-store.sh62
2 files changed, 36 insertions, 27 deletions
diff --git a/README b/README
index b7642ec..52e23af 100644
--- a/README
+++ b/README
@@ -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