我有一个简单的 CLI 工具,要求输入主密码,并且只有在主密码正确时才打印字符串 $USER $PASSWORD
。
如何重现?
这是一个仅用于演示我的用例的脚本,真正的脚本实际上是我无法控制的 CLI 工具:
#!/usr/bin/env sh
printf "Enter master password: "
read -s password
echo
[ "$password" == "MasterPassword" ] && echo "user1 Passw0rd!"
使用示例:
$ ./my-cli-tool
Enter master password: ********
user1 Passw0rd!
问题
我不想将密码 (Passw0rd!
) 打印在屏幕上。我只想打印用户 (user1
),然后将密码 (Passw0rd!
) 复制到剪贴板(假设使用 xclip -sel clipboard
)。
我试过什么?
如果第一行 (Enter master password
) 不存在,我会这样做:
./my-cli-tool |
while read -r USER PASSWORD
do
echo $USER
echo -n $PASSWORD | xclip -sel clipboard
done
但我的问题是我应该在提示要求时输入主密码,所以第一行总是打印出来。我试过运行./my-cli-tool | tail -1
:提示没有显示,虽然如果我输入主密码,它只打印user1 Passw0rd!
,所以我可以执行上面的命令将密码复制到剪贴板。
问题
你有什么想法:
- 始终在屏幕上显示主密码提示
- 只打印用户
- 将密码复制到剪贴板
预期产出
基本上,我想要那种输出:
$ ./my-cli-tool | solution
Enter master password: ********
user1
并将 Passw0rd!
复制到我的剪贴板中。
回答1
我只是稍微修改了您的答案-
./my-cli-tool | {
x=$(dd bs=1 count=1 2>/dev/null)
while [ "$x" != : ]; do
printf %c "$x";
x=$(dd bs=1 count=1 2>/dev/null)
done
printf %s ": "
while read -r USER PASSWORD
do
echo $USER
echo -n $PASSWORD | xclip -sel clipboard
done
}
让我知道它是否有效。
编辑:更新的逻辑。使用 dd
。