GBase 8a命令行客户端由于stdbuf缓冲导致输出信息顺序错误

GBase 8a提供了命令行客户端gccli 用来执行sql语句,也支持批量执行。如果将输出结果转到文件,会出现输出信息顺序错误问题。解决方案是关闭stdbuf的缓冲区。

不关闭的输出错误样例

可以看到输出的end字符串跑到前面了。

[gbase@rh6-1 ~]$ gccli -e"system echo 'start';select now();system echo 'end';" > 2.log      [gbase@rh6-1 ~]$ cat 2.log
start
end
now()
2020-10-15 11:24:18
[gbase@rh6-1 ~]$

关闭的输出样例

输出正常。其中的参数是-o 小写的字母o. 后面的数字是0。 L是按行输出。

或者增加 -n 参数 (--unbuffered) 也可以实现相同效果

[gbase@rh6-1 ~]$ stdbuf -o0 -oL gccli -e"system echo 'start';select now();system echo 'end';" > 1.log
[gbase@rh6-1 ~]$ cat 1.log
start
now()
2020-10-15 11:24:00
end
[gbase@rh6-1 ~]$
[gbase@rh6-1 ~]$ gccli -n  -e"system echo 'start';select now();system echo 'end';" > 2.log
[gbase@rh6-1 ~]$ cat 2.log
start
now()
2020-10-15 11:44:29
end
[gbase@rh6-1 ~]$