LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 11688|回复: 75

如何将标准错误输出重定向到一个文件的同时在屏幕上也显示,谢谢[基本解决]

 关闭 [复制链接]
发表于 2004-4-11 17:39:52 | 显示全部楼层 |阅读模式
如何将标准错误输出重定向到一个文件的同时在屏幕上也显示,谢谢
发表于 2004-4-11 17:44:51 | 显示全部楼层

回复: 如何将标准错误输出重定向到一个文件的同时在屏幕上也显示,谢谢

最初由 enruan 发表
如何将标准错误输出重定向到一个文件的同时在屏幕上也显示,谢谢

<command> 2>&1 | tee <logfile>
注意,lfs进行make的过程中,仅仅把标准错误输出到文件当中是无意义的,因为此时标准错误包含的信息很少,纠错需要上下文判断。
上面的命令考虑到了这一点,同时也适应了普通情况(命令一开始就出错,请看如下示例)。

  1. [root@home root]# id fdfd 2>&1 |tee logfile
  2. id: fdfd: No such user
  3. [root@home root]# cat logfile
  4. id: fdfd: No such user
复制代码
 楼主| 发表于 2004-4-11 19:41:08 | 显示全部楼层

谢谢

不过,有一点没懂,

就是用了">"重定向后

还能再用管道符吗?》

为什么在这儿能用?
发表于 2004-4-11 19:47:54 | 显示全部楼层

回复: 谢谢

管道的用途是把进程的标准输出连接到另一个进程的标准输入,2>&1是把标准错误作为标准输出的副本。在楼顶那个命令里,把标准输出和标准错误都输出作为tee命令的标准输入,tee的用途是把标准输入的副本拷贝到文件,并输出。
不要混淆管道与重定向,这是两个不同的概念。
关于重定向,请参考:
http://www.linuxsir.cn/bbs/showt ... =%D6%D8%B6%A8%CF%F2
 楼主| 发表于 2004-4-11 20:24:43 | 显示全部楼层

再谢

不过,我还是想知道如果我不想要标准输出的东西,只要2的能做到吗?
发表于 2004-4-11 20:40:11 | 显示全部楼层

不过,我还是想知道如果我不想要标准输出的东西,只要2的能做到吗?

command 2>error.log
发表于 2004-4-11 20:45:35 | 显示全部楼层
最初由 shelling 发表
command 2>error.log

修正一下,楼主的意思是把标准错误保存为文本的同时也输出它。
2>filname就把标准错误重定向到文本而不输出它了。

据在下所知,Bash的重定向机制没有提供这类功能。我利用gawk作为"中转器"来实现它。
<command> 2>logfile | gawk '{print}END{while((getline<"logfile">0))print}'
运行示例:

  1. [root@home root]# make 2>logfile | gawk '{print}END{while((getline<"logfile">0))print}'
  2. make: *** No targets specified and no makefile found.  Stop.
  3. [root@home root]# cat logfile
  4. make: *** No targets specified and no makefile found.  Stop.
复制代码
发表于 2004-4-11 21:16:09 | 显示全部楼层

  1. exec 9>&1
  2. cmd 2>&1 >&9 9>&&#8722; | tee logfile 9>&&#8722;
  3. exec 9>&&#8722;
复制代码
 楼主| 发表于 2004-4-11 21:23:37 | 显示全部楼层

晕啊,

我晕,还可以这样!
你是在玩数字游戏吗?
为什么用9不用3?
发表于 2004-4-11 21:25:04 | 显示全部楼层
最初由 r2007 发表

  1. exec 9>&1
  2. cmd 2>&1 >&9 9>&&#8722; | tee logfile 9>&&#8722;
  3. exec 9>&&#8722;
复制代码

不错~~~
不过既然要保存为文本,那么最好充分利用该文本,况且用这么多文本描述符,可读性较差。个人意见,呵呵~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表