根据 POSIX 标准:文本行必须以换行符结尾。这意味着 rbw get xxx 的时候,实际上屏幕输出的是带有空格的。但是为什么 export a = $(rbw get xxx) 不会存在问题呢?因为 ${} (命令替换|Command Substitution) 会去掉尾部的换行。
参考链接:
3 notes found.
根据 POSIX 标准:文本行必须以换行符结尾。这意味着 rbw get xxx 的时候,实际上屏幕输出的是带有空格的。但是为什么 export a = $(rbw get xxx) 不会存在问题呢?因为 ${} (命令替换|Command Substitution) 会去掉尾部的换行。
参考链接:
TL,DR: 在环境中添加 export RBW_TTY=$(tty) 即可解决
在 macos 下使用 rbw 来获取密钥时,经常会遇到需要至少 10s 以上的情况,但是在 linux 下并没有此现象,经过一番研究发现是 macos 系统机制问题导致的:rbw 在系统中会调用 ttyname(), 这个机制在 linux 下和 macos 下不同,在 linux 下只需要读取 /proc/self/fd/0 即可,但是在 macos 下,需要遍历,这可能要调用 /dev 目录下数百个设备文件。rbw 提供了一个机制,可以通过设定 RBW_TTY 这个环境变量跳过此检测。
direnv 配合 rbw 平常用起来很好用,还不用担心密钥硬编码到代码中泄露。
export TF_VAR_ntfy_token=$(rbw get ntfy_github_action_token)
export TF_VAR_gmail_token=$(rbw get gmail_github_action_token)
我在 macos 下配合 rbw 会有很大延迟 (解锁之后使用 rbw get 有时候会有接近 10s 的延迟),我研究发现是因为 rbw 的获取 ttyname() 有性能问题。
请在 .zshrc 中添加以下环境变量来解决这个问题:
export RBW_TTY=$(tty)
配置后响应时间可缩短到 1 秒内。