在OSX上我正在尝试创建目录的tarball并在运行中加密 它使用gpg并将tar消息的输出保存在日志文件中 后来的分析。
虽然tar + gpg在飞行中很容易
tar zcvf - foo | gpg -e -r foo@bar.com -o foo.tgz.gpg
到目前为止,我没有记录tar的输出(也许是gpg中的一个) case)到日志文件。
我尝试了几种
的组合tar | gpg | tee
tar | gpg 2>&1 >(tee)
tar | gpg > file.log
这里有什么帮助吗?
干杯 的Davide
答案 0 :(得分:1)
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)无法访问上一个命令stderr
(tar
)。 stderr
已经到达目的地(您的终端,最有可能)。
2> >(command )
个管道(非常简单地>()
在stderr
到stdin
command
之下创建一个未命名的操作系统级管道。由于command
是子进程,因此其stderr
(#2)描述符将指向与父进程的stderr
相同的文件。
答案 1 :(得分:0)
问题是当使用2>在该行的末尾,您只重定向第二个命令(gpg)stderr。如果你想(似乎)重定向tar命令stderr,你应该添加2>管道之前的日志文件,如下所示:
tar zcvf - foo 2> tar.log | gpg -e -r foo@bar.com -o foo.tgz.gpg