在输出bash时间之前输入任意内容

时间:2015-04-19 21:19:11

标签: bash shell

我有以下bash脚本:

#!/bin/bash

printColored(){
  echo -e "\e[0;"$2"m \t"$1" \e[0;37m"
}

printColored "Executing query with usual tables." 34
time hive -f query1.sql
printColored "Executing query with RCFile tables." 34
time hive -f query2.sql

它给了我以下输出:

    Executing query with usual tables. 
...
a lot of output of hive command
...
real    1m8.928s
user    0m36.283s
sys 0m2.157s
    Executing query with RCFile tables. 
...
hive output again
...
real    1m9.376s
user    0m37.186s
sys 0m2.168s

如果在 hive之前需要所有echo输出并在之后输出,我该如何更改我的脚本? 即输出必须按以下顺序排列:

...hive 1...
...hive 2...
    Executing query with usual tables. 
real    1m8.928s
user    0m36.283s
sys 0m2.157s
    Executing query with RCFile tables. 
real    1m9.376s
user    0m37.186s
sys 0m2.168s

如果这是不可能的,我该如何消除配置输出?

2 个答案:

答案 0 :(得分:2)

可以使用time shell变量控制bash的TIMEFORMAT命令的输出。要使用通常的时间信息包含所需的消息:

TIMEFORMAT=$'\nExecuting query with usual tables\nreal\t%3lR\nuser\t%3lU\nsys%3lS'
time hive -f query1.sql
TIMEFORMAT=$'\nExecuting query with RCFile tables\nreal\t%3lR\nuser\t%3lU\nsys%3lS'
time hive -f query2.sql
unset TIMEFORMAT

答案 1 :(得分:1)

我相信时间输出为std错误,所以你可以尝试将其重定向到临时文件然后显示在最后 - 比如

tmpfile=`mktemp`
(time hive -f query1.sql) 2>  $tmpfile
(time hive -f query2.sql) 2>> $tmpfile
cat $tmpfile
rm $tmpfile