Bash 捕捉多个管道命令的输出

Bash 捕捉多个管道命令的输出,bash,pipe,stdout,stderr,Bash,Pipe,Stdout,Stderr,直到今天,我总是能够为我所有的bash问题找到答案。但现在我卡住了。我正在测试LSI 9265上的20TB RAID6配置 我编写了从/dev/uradom创建文件的脚本,我正在创建第二个脚本,用两个插件从所有文件计算md5。 一种是使用time命令来计算md5sum执行时间 第二种方法是使用pv命令显示每个md5sum命令的进度 我的命令如下所示: filename="2017-03-13_12-38-08" /usr/bin/time -f "real read %E" pv $filena

直到今天,我总是能够为我所有的bash问题找到答案。但现在我卡住了。我正在测试LSI 9265上的20TB RAID6配置

我编写了从/dev/uradom创建文件的脚本,我正在创建第二个脚本,用两个插件从所有文件计算md5。 一种是使用time命令来计算md5sum执行时间 第二种方法是使用pv命令显示每个md5sum命令的进度

我的命令如下所示:

filename="2017-03-13_12-38-08"
/usr/bin/time -f "real read %E" pv $filename | md5sum | sed "s/-/$filename /"
这是终端打印输出的示例:

/usr/bin/time -f "real read %E" pv $i | md5sum | sed "s/-/$i/"
1GiB 0:00:01 [ 551MiB/s] [==================================================================================================>] 100%
real read 0:01.85
f561af8cc0927967c440fe2b39db894a  2017-03-13_12-38-08
我想把它记录到文件中。我使用2>&1、T形三通和方括号失败了所有尝试。我知道pv使用stdErr,但这无助于找到解决方案。我只能赶上f561af8cc0927967c440fe2b39db894a 2017-03-13_12-38-08_完成 这还不够。

这是解决方案:

(time pv -f $filename | md5sum | sed "s/-/$filename/") 2>&1 | tee output.log 
或等效文件,但不打印到output.log的纯终端文件中

(time pv -f $filename | md5sum | sed "s/-/$filename/") > output.log 2>&1

你能给我们看一下你实际上想通过管道传送到文件的命令吗?这些命令应该可以工作。这些是我试图将输出放入文件的命令:/usr/bin/time-f real read%E pv$filename | md5sum | sed s/-/$filename/>output 2>&1,我刚刚找到解决方案时间pv-f$I | md5sum | sed s/$I/2>&1 | tee output.log或等效命令,但没有打印到仅终端文件output.log time pv f$I | md5sum | seds/-/$i/>output.log 2>&1您已经正确地找到了问题所在,即您需要将要通过管道传输的命令包装在括号中,否则您只能从最后一个命令获得输出。你应该把它作为一个答案贴在下面,并标记为这样!