bash - 解析脚本的输出并仅在打印前处理最后一行

我有一个简单的 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

相似文章

c - 在 C 中绘制镜像箭头

我无法使用星号在C中绘制此形状:**************************************************我知道如何制作右箭头或左箭头,但我不知道如何制作这样的箭头。这是我到...

随机推荐

最新文章