Bash 创建tarball,动态加密,并将tar消息保存在日志文件中
在OSX上,我试图创建一个目录的tarball,并进行动态加密 它与gpg一起使用,并将tar消息的输出保存在日志文件中,以便 稍后的分析 而tar+gpg在飞行中非常容易Bash 创建tarball,动态加密,并将tar消息保存在日志文件中,bash,shell,tar,gnupg,tee,Bash,Shell,Tar,Gnupg,Tee,在OSX上,我试图创建一个目录的tarball,并进行动态加密 它与gpg一起使用,并将tar消息的输出保存在日志文件中,以便 稍后的分析 而tar+gpg在飞行中非常容易 tar zcvf - foo | gpg -e -r foo@bar.com -o foo.tgz.gpg 到目前为止,我无法记录tar的输出(可能还有其中的gpg) 案例)添加到日志文件 我尝试了几种不同的组合 tar | gpg | tee tar | gpg 2>&1 >(tee) tar | g
tar zcvf - foo | gpg -e -r foo@bar.com -o foo.tgz.gpg
到目前为止,我无法记录tar的输出(可能还有其中的gpg)
案例)添加到日志文件
我尝试了几种不同的组合
tar | gpg | tee
tar | gpg 2>&1 >(tee)
tar | gpg > file.log
有人帮忙吗
干杯
Davide
2>file.log应该可以实现它。
如果您想tee
流stderr
并将其保持在原始目的地,您可以使用
2>>(tee file.log>&2)
在您的示例中:
tar zcvf - foo 2> >(tee file.log >&2) | gpg -e -r foo@bar.com -o foo.tgz.gpg
您的尝试没有成功,因为管道(|)仅将上一个命令的stdout
转发到当前命令的stdin
。当前命令(gpg)无权访问上一个命令(tar
)的stderr
)。该stderr
已到达其目的地(很可能是您的终端)
2>>(command)
管道(确切地说是>()
在下面创建一个未命名的操作系统级管道)stderr
到命令的stdin
。由于command
是一个子进程,因此它的stderr
(#2)描述符将指向与父进程的stderr
相同的文件。问题在于,当在行尾使用2>时,只重定向第二个命令(gpg)stderr。如果您想要(看起来)重定向tar命令stderr,您应该在管道之前添加2>logfile,如下所示:
tar zcvf - foo 2> tar.log | gpg -e -r foo@bar.com -o foo.tgz.gpg