gpg — 仅将内容直接解密到 stout

gpg — decrypt only content directly to stout

我有文件 secret.txt.gpg 我想解密,这样内容就存储在这样的变量中:

TXT=$(gpg --decrypt secret.txt.gpg)

但这种方式添加了很多额外的 gpg: … 行,包含有关密钥等的信息,例如:

gpg: encrypted with 4096-bit RSA key, ID xxxx, created xxxx
  "xx xx (xx) <xx@xx.xx>"
gpg: Signature made xxx
gpg:                using RSA key xxx
…
Secret Message

顺便说一句:

gpg -d secret.txt.gpg > out.txt

只是将内容写入文件。

如何只捕获内容,而不将其写入文件?

更新

尽管@Roger Answer 更好并解释了原因,但我可以使用它:

 TXT=$(gpg --decrypt secret.txt.gpg > /dev/stdout)

GPG 消息被写入 STDERR,这就是为什么通过管道将 STDOUT 传输到文件会忽略这些消息。

如果加密文件未签名,您通常会通过提供 --quiet 开关来抑制有关加密的消息。如果文件已签名,您仍会收到有关签名的消息。即使您提供了 --skip-verify,您仍然会收到一条消息,提示您签名验证已被禁止。

为了抑制所有这些消息,我建议您通过管道将 STDERR 传输到 /dev/null,例如:

TXT=$(gpg --decrypt secret.txt.gpg 2>/dev/null)