LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: higkoo

怎样让输出信息即在命令行上显示,同时也记录到日志文件中?

[复制链接]
发表于 2009-9-27 23:33:21 | 显示全部楼层
bash在脚本的最开始运行:
  1. exec > >( tee /tmp/stdout >/dev/stdout )
  2. exec 2> >( tee /tmp/stderr >/dev/stderr )
复制代码
可能可以满足你的要求。
回复 支持 反对

使用道具 举报

发表于 2009-10-7 22:14:41 | 显示全部楼层
Post by higkoo;2031006
还真没看懂。。。

那就解释一下吧,不知道合不合你用。请自便。
核心就是利用script命令的-f参数。
命令行输入script -f,系统会提示你系统自动生成了一个名为typescript的文件,然后自动返回命令行提示符。typescript就是个文件名,位置就在当前目录。这时其实script命令已经开启了一个shell,你之后的命令输入以及屏幕输出都是在这个新开启的shell中。
其实这也没啥。精彩的地方在于:从现在开始你所有的输入和系统所有的屏幕输出都实时同步地写入了typescript这个文件中,这样你就可以再开第三个shell(如果原本是tty方式,那就ctrl+alt+fn开另一个tty,如果是GUI就再开一个console窗口),在这第三个shell中用tail -f typescript命令可以实时观察你在第二个shell中的输入输出。
当你在第二个shell里完成任务后可以用ctrl+d退出第二个shell,这时typescript文件就保留下来了,你可以查看刚才你在第二个shell中的所有输入输出。

script+tail这一对儿命令的这种用法,我想到的一个用途就是可以做linux命令的实时教学演示(笔记本接投影)。
单独用script,我想到的用途就是可以追溯命令执行历史,比如冗长的编译过程超多页输出、比如连续多个操作序列变成一个脚本。。。。
诺,就是这样。怎么适用你需要的情况,就变通着用吧
回复 支持 反对

使用道具 举报

发表于 2009-10-9 00:44:19 | 显示全部楼层
Post by higkoo;2031006
还真没看懂。。。


script 命令用来记录命令行的所有输出,无论在两次script之间运行了多少程序,结果都可以保存到文件中。
我一般在运行个很长的编译之前会运行个 script 来记录一些日志,方便差错
回复 支持 反对

使用道具 举报

发表于 2009-10-9 19:31:34 | 显示全部楼层
Post by higkoo;2031004
如果真没有好的办法,也只有这样了。

坚决不用TEE,可控性不强,不可能每句话就都关注它。


我觉得tee的可靠性、可控性还是不错的。值得试一试。:cool:
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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