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 ~]$