From: Olivier Mehani <[email protected]>

This allows to output only the selected line, useful for piping.

Also introduce the '-1' shorthand, which is the same as --only=1.

Signed-off-by: Olivier Mehani <[email protected]>
---
 src/password-store.sh | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/password-store.sh b/src/password-store.sh
index 63be840..eace832 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -224,7 +224,7 @@ cmd_usage() {
                List passwords.
            $PROGRAM find pass-names...
                List passwords that match pass-names.
-           $PROGRAM [show] [--clip[=line-number],-c[line-number]] pass-name
+           $PROGRAM [show] [--clip[=line-number],-c[line-number] | 
-1,--only[=line-number],-o[line-number]] pass-name
                Show existing password and optionally put it on the clipboard.
                If put on the clipboard, it will be cleared in $CLIP_TIME 
seconds.
            $PROGRAM grep search-string
@@ -295,28 +295,34 @@ cmd_init() {
 }
 
 cmd_show() {
-       local opts clip_location clip=0
-       opts="$($GETOPT -o c:: -l clip:: -n "$PROGRAM" -- "$@")"
+       local opts clip_location clip=0 only=0
+       opts="$($GETOPT -o c::,o::,1 -l clip::,only:: -n "$PROGRAM" -- "$@")"
        local err=$?
        eval set -- "$opts"
        while true; do case $1 in
                -c|--clip) clip=1; clip_location="${2:-1}"; shift 2 ;;
+               -o|--only) only=1; clip_location="${2:-1}"; shift 2 ;;
+               -1) only=1; clip_location="1"; shift 1 ;;
                --) shift; break ;;
        esac done
 
-       [[ $err -ne 0 ]] && die "Usage: $PROGRAM $COMMAND 
[--clip[=line-number],-c[line-number]] [pass-name]"
+       [[ $err -ne 0 ]] && die "Usage: $PROGRAM $COMMAND 
[--clip[=line-number],-c[line-number] | 
-1,--only[=line-number],-o[line-number]] pass-name"
 
        local path="$1"
        local passfile="$PREFIX/$path.gpg"
        check_sneaky_paths "$path"
        if [[ -f $passfile ]]; then
-               if [[ $clip -eq 0 ]]; then
+               if [[ $clip -eq 0 && $only -eq 0 ]]; then
                        $GPG -d "${GPG_OPTS[@]}" "$passfile" || exit $?
                else
-                       [[ $clip_location =~ ^[0-9]+$ ]] || die "Clip location 
'$clip_location' is not a number."
+                       [[ $clip_location =~ ^[0-9]+$ ]] || die "Password 
location '$clip_location' is not a number."
                        local pass="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | 
tail -n +${clip_location} | head -n 1)"
-                       [[ -n $pass ]] || die "There is no password to put on 
the clipboard at line ${clip_location}."
-                       clip "$pass" "$path"
+                       [[ -n $pass ]] || die "There is no password at line 
${clip_location}."
+                       if [[ $clip -eq 0 ]]; then
+                               echo "$pass"
+                       else # default to clipping
+                               clip "$pass" "$path"
+                       fi
                fi
        elif [[ -d $PREFIX/$path ]]; then
                if [[ -z $path ]]; then
-- 
2.8.2

_______________________________________________
Password-Store mailing list
[email protected]
http://lists.zx2c4.com/mailman/listinfo/password-store

Reply via email to