Bash-如何将stderr重定向到管道中下一个命令的stdout?

Bash-如何将stderr重定向到管道中下一个命令的stdout?,bash,Bash,上下文:我有一个备份脚本,它对指定的目录进行tar,然后通过管道将其传输到gpg,以对称地加密和压缩归档文件。然后我将stderr重定向到stdout,并通过管道将两者都重定向到tee,以将其记录到一个文件中,并将输出保存到一个shell变量中 RESULT=$(tar -c "$BACKUPPATH" | gpg --batch --passphrase 1234 --yes \ -o "$FILELOC" -c --bzip2-compress-l

上下文:我有一个备份脚本,它对指定的目录进行tar,然后通过管道将其传输到gpg,以对称地加密和压缩归档文件。然后我将stderr重定向到stdout,并通过管道将两者都重定向到
tee
,以将其记录到一个文件中,并将输出保存到一个shell变量中

RESULT=$(tar -c "$BACKUPPATH" |
         gpg --batch --passphrase 1234 --yes \
             -o "$FILELOC" -c --bzip2-compress-level 9 \
             2>&1 |
         tee -a "$LOG")
但是,tar一直在失败,因此我想以相同的方式捕获tar的stderr(因此它会显示在
$RESULT
中,也会显示在日志文件中)

最好的方法是什么

我试过这个:

RESULT=$(tar -c "$BACKUPPATH" 3<&2 |
         gpg --cipher-algo AES256 --batch --passphrase 1234 --yes \
             -o "$FILELOC" -c --bzip2-compress-level 9 \
             2>&1 3>&1 |
         tee -a  "$LOG");
RESULT=$(tar-c“$BACKUPPATH”3&13>&1|
三通-一根“$LOG”);
但当我经过一条通往柏油的虚假道路时,它似乎不起作用。它不会显示在日志或变量中。也许我需要先进先出

RESULT=$(
    {
        tar -c "$BACKUPPATH" |
        gpg --batch --passphrase 1234 --yes \
            -o "$FILELOC" -c --bzip2-compress-level 9; \
    } 2>&1 | tee -a "$LOG"
)
重定向两个命令的stderr,方法是将它们放在大括号内,并将
2>&1
重定向应用于整个复合命令


将两个命令的stderr放在花括号内,并将
2>&1
重定向应用于整个复合命令,从而重定向这两个命令的stderr。

谢谢!你能告诉我为什么我的解决方案不起作用吗?文件描述符是否没有通过管道保存?
3A管道将一个命令的stdout传递给另一个命令的stdin;它不会连接/传递/等任何其他文件描述符。谢谢!你能告诉我为什么我的解决方案不起作用吗?文件描述符是否没有通过管道保存?
3A管道将一个命令的stdout传递给另一个命令的stdin;它不连接/传递/etc任何其他文件描述符。