我有一个简单的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!
复制到我的剪贴板。
我只是稍微修改了一下你的答案-
./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
.