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