今天调试一个bash,要把屏幕的输出结果存到log文件中,开始输入
$bash -x ./test.sh > log
结果发现log里只存放了程序的执行结果,后来在cu的一篇帖子里得到了启发, bash -x的调试信息是输出到2号流中的,所以解决方案为
bash -x ./test.sh 2>&1 | tee log
想起以前要存放执行make的结果时也遇到类似问题,总结如下:
1、管道符的" | "的作用只是把前一个程序的标准输出流(stdout)的数据 作为后一个程序 的标准输入流stdin的数据,如不进行重定向,则其他输出流的信息是无法传给后面的程序的
2、屏幕得到的信息不一定是从程序的标准输出来的,也包括标准错误输出流stderr中的信息
3、有些程序(特别是象bash 、make这样执行了其他程序的程序)的设计者为了省事,把一些正常情况的信息也放在stderr中输出(即使程序本身并无错误),而stdout用来输出被调用程序的执行时信息,造成了用户的误解
阅读(1953) | 评论(0) | 转发(1) |