求助一个 shell 脚本和 alfred 表现不一样的问题

2022-06-03 14:46:03 +08:00
 SimonOne

我用 pass otp 管理 otp 验证。 所以我下了一个 alfred workflow:https://github.com/CGenie/alfred-pass 用来快速得选择 otp 并输出到剪切板。

其实这个 shell 很简单,就是在 alfred 选择 otp 后,执行

bash pass-otp.sh "{query}"

psss-otp.sh 里则是用 pass otp 工具的命令来输出 otp 到剪切板

pass otp -c "$1"

但是遇到一个很诡异的事,就是我单独去终端模拟器执行输出 Steam 的 otp 时,能正常输出到剪切板

bash pass-otp.sh Steampass 文件名

但是用 alfred 时就毫无反应(也不能说没反应,gpg 的私钥密码输入框至少是弹出来了)

但是,换另一个 otp ,比如 coinbase 。用 alfred 时就能正常输出到剪切板。

我研究了一晚上,包括脚本里加上打印看传参有没有问题,有没有特殊字符,可是都很正常,心态都给我整崩了。 来求助下 V 站的大家,看看还有什么细节没考虑到的。

T_T 存 otp 链接的 pass 文件名的格式我都是保持一致的,唯一的区别就是 Steam 的 otp 是 5 位的,但是手动执行脚本又能取到,真的是百思不得其解!!!如果是脚本原因的话,试验其他的 otp 文件又都正常!!!

这里附一下 psss-otp.sh 的内容

#!/bin/bash

set -e

QUERY=$1
PATH=/usr/local/bin:$PATH

# GPG agent
# envfile="$HOME/.gnupg/gpg-agent.env"
# if [[ -e "$envfile" ]] && kill -0 $(grep GPG_AGENT_INFO "$envfile" | cut -d: -f 2) 2>/dev/null; then
#     eval "$(cat "$envfile"); export GPG_AGENT_INFO"
# else
#     eval "$(gpg-agent --daemon --write-env-file "$envfile")"
# fi

# PASS
#pass otp "$QUERY" | awk 'BEGIN{ORS=""} {print; exit}' | pbcopy
pass otp -c "$QUERY" #这里我打印测试过了,$QUERY 参数没取错
osascript -e 'display notification "Copied OTP key to clipboard" with title "Unix pass"'
942 次点击
所在节点    问与答
5 条回复
wd
2022-06-03 15:02:42 +08:00
是不是只有弹 gpg 的时候才有问题?
SimonOne
2022-06-03 15:05:41 +08:00
@wd #1 输出其他的 otp 时也弹 gpg 的密码框,输入完点确定就可以跑出来。
就这个 steam 的,在 alfred 中跑的时候,就是弹 gpg 的密码框,输入完点确定就没有后续反应了。
但是我手动执行脚本,又能正常执行完逻辑输出到剪切板。


真的很难理解怎么会这样。
SimonOne
2022-06-03 15:07:32 +08:00
@SimonOne #2 gpg 的 agent 会暂时记住,短时间内不需要再输密码,但是在 alfred 跑 steam 的 otp 也一样,毫无反应,其他的 otp 又都能正常跑完。
SimonOne
2022-06-03 18:34:59 +08:00
@wd #1 找到原因了,现学了下 alfred 怎么调试,原来 pass 工具在被调用时报错说只支持 6 ,7 ,8 长度的 😢 还得接下去看为啥命令行直接运行不报这个错。但是和这段脚本本身无关了。
SimonOne
2022-06-03 18:55:21 +08:00
@SimonOne #4 问题解决了,alfred 的 path 要单独写在脚本里 😅 但是其实不知道咋写全,直接 source /Users/XXX/.bash_profile 完事,反正自己用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/857122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX