上下文:我有一个备份脚本,该脚本将压缩指定的目录,然后将其通过管道传输到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");
但是,当我通过虚假的路径到达tar时,它似乎不起作用。它不会显示在日志或变量中。也许我需要一个fifo?
答案 0 :(得分:2)
RESULT=$(
{
tar -c "$BACKUPPATH" |
gpg --batch --passphrase 1234 --yes \
-o "$FILELOC" -c --bzip2-compress-level 9; \
} 2>&1 | tee -a "$LOG"
)
通过将两个命令的stderr放在花括号中并将2>&1
重定向应用于整个复合命令来重定向它们。