如何从终端读取隐藏的输入并将其通过管道传递给另一个命令

How to read hidden input from terminal and pipe it to another command

我希望能够在终端中安全地键入文本并将其通过管道传输到另一个命令:

理想情况下:

非安全输入示例

echo "secret" | wc -c

几乎是我想要的:

read -s | wc -c

基本上与您输入密码的方式相同 sudo 和类似的。

我的用例

echo "secret" | gpg --encrypt --armor -r 1234567890ABCDEF | xclip

我正在寻找一种具有上述几点限制的方法。知道我要找的东西不存在也是我会接受并标记的答案。

我根据接受的答案创建了别名

alias secnote="{ read -s; printf %s $REPLY; } | gpg --encrypt --armor -r 123467890ABCDEF | pbcopy"

这是你想要达到的目标吗?

$ read -s       # I type `secret`
$ echo $REPLY
secret
$ printf %s $REPLY | wc -c
6
$ unset REPLY
$ echo $REPLY
# empty now

或者你想要 one-liner 这样的 :

{ read -s -p "Input a secret: "; printf %s $REPLY; } | wc -c

如果定义别名:

alias readp='{ read -s -p "Input a secret: "; printf %s $REPLY; }'

那么你可以readp | wc -c