捕获几个管道命令的输出

时间:2017-03-13 10:45:40

标签: bash pipe stdout stderr

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

我编写了从/ dev / urandom创建文件的脚本,我创建了第二个从所有带有两个插件的文件中计算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,使用tee,使用括号。我知道pv使用stdErr,但这对寻找解决方案没有帮助。我只能抓住" f561af8cc0927967c440fe2b39db894a 2017-03-13_12-38-08_done" 这还不够。

1 个答案:

答案 0 :(得分:1)

这是解决方案:

(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