Bash脚本中获取gpg --edit-key输出失败:原因及解决方法
问题原因及解决办法
失败原因
gpg的--edit-key交互模式下,绝大多数输出(包括密钥详情、交互提示信息)都是输出到标准错误流(stderr),而非标准输出流(stdout)。而你使用的命令替换$(...)和管道| tee默认只会捕获stdout的内容,因此无法获取到预期的输出。
解决办法
核心思路是把gpg的stderr输出重定向到stdout,让命令替换或管道能捕获到这些内容:
1. 将输出存入变量
修改命令,添加2>&1把stderr重定向到stdout:
var=$(echo -e "quit\n" | gpg --command-fd 0 --edit-key userid 2>&1) echo "$var"
2. 通过tee写入文件
同样添加2>&1,让tee能捕获到stderr的内容:
echo -e "quit\n" | gpg --command-fd 0 --edit-key userid 2>&1 | tee file cat file
如果只需要捕获stderr而丢弃stdout,可以用2>&1 >/dev/null,比如:
var=$(echo -e "quit\n" | gpg --command-fd 0 --edit-key userid 2>&1 >/dev/null)
内容的提问来源于stack exchange,提问作者cliusz
相关产品推荐
相关产品推荐

