V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SimonOne
V2EX  ›  问与答

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

  •  
  •   SimonOne · 2022-06-03 14:46:03 +08:00 · 930 次点击
    这是一个创建于 889 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用 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 文件名
    

    Imgur

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

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

    我研究了一晚上,包括脚本里加上打印看传参有没有问题,有没有特殊字符,可是都很正常,心态都给我整崩了。 来求助下 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"'
    
    wd
        1
    wd  
       2022-06-03 15:02:42 +08:00 via iPhone
    是不是只有弹 gpg 的时候才有问题?
    SimonOne
        2
    SimonOne  
    OP
       2022-06-03 15:05:41 +08:00
    @wd #1 输出其他的 otp 时也弹 gpg 的密码框,输入完点确定就可以跑出来。
    就这个 steam 的,在 alfred 中跑的时候,就是弹 gpg 的密码框,输入完点确定就没有后续反应了。
    但是我手动执行脚本,又能正常执行完逻辑输出到剪切板。


    真的很难理解怎么会这样。
    SimonOne
        3
    SimonOne  
    OP
       2022-06-03 15:07:32 +08:00
    @SimonOne #2 gpg 的 agent 会暂时记住,短时间内不需要再输密码,但是在 alfred 跑 steam 的 otp 也一样,毫无反应,其他的 otp 又都能正常跑完。
    SimonOne
        4
    SimonOne  
    OP
       2022-06-03 18:34:59 +08:00
    @wd #1 找到原因了,现学了下 alfred 怎么调试,原来 pass 工具在被调用时报错说只支持 6 ,7 ,8 长度的 😢 还得接下去看为啥命令行直接运行不报这个错。但是和这段脚本本身无关了。
    SimonOne
        5
    SimonOne  
    OP
       2022-06-03 18:55:21 +08:00
    @SimonOne #4 问题解决了,alfred 的 path 要单独写在脚本里 😅 但是其实不知道咋写全,直接 source /Users/XXX/.bash_profile 完事,反正自己用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:17 · PVG 03:17 · LAX 11:17 · JFK 14:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.