我有以下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
如果这是不可能的,我该如何消除配置输出?
答案 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