LinuxSir.cn,穿越时空的Linuxsir!

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

一个重定向问题, 似乎难以搞定?

[复制链接]
发表于 2006-6-1 17:54:13 | 显示全部楼层 |阅读模式
譬如下面这个例子,如果想同时分别把ping的结果和time计时的结果重定向到两个文件里头,该怎么写呢?

  1. time 'ping -c3 127.0.0.1 >ppp.log' >ttt.log  
复制代码


另外, 有点奇怪, 好象time能输出到屏幕, 却不能重定向输出到某个文件里头......
发表于 2006-6-1 18:02:37 | 显示全部楼层
(time ping xxx ) >ppp.log 2>ttt.log
回复 支持 反对

使用道具 举报

发表于 2006-6-1 18:06:55 | 显示全部楼层
{ { time ping xxx; } 2>ttt.log ;} >ppp.log

这样比较好。
回复 支持 反对

使用道具 举报

发表于 2006-6-1 18:10:04 | 显示全部楼层
如果你系统有time外部命令的话,就简单了

/usr/bin/time ping xxx 2>ttt.log >ppp.log
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-1 19:00:56 | 显示全部楼层
cool!
能否这么理解:
在用 time <command> 的时候,
time的计时输出是作为stderr输出的, 而整个命令运行的结果还是跟单独用ping执行一样, 也就是说stdout还是ping的结果.....另外, nohup或者nice的输出是不是也应该这个样子?
但是

Post by seamonkey

(time ping xxx ) >ppp.log 2>ttt.log


1. 为什么前面一定要加"()"呢?

Post by seamonkey
{ { time ping xxx; } 2>ttt.log ;} >ppp.log

这样比较好。


2. 两种括号"()"跟"{}"有什么分别?

Post by seamonkey
如果你系统有time外部命令的话,就简单了

/usr/bin/time ping xxx 2>ttt.log >ppp.log


3.这个似乎在我这里似乎不行, 虽然也有"/usr/bin/time"这个文件, 但得到的ttt.log是这样子的:

  1. 0.00user 0.00system 0:02.00elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
  2. 0inputs+0outputs (0major+202minor)pagefaults 0swaps
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-6-1 20:05:50 | 显示全部楼层
这个问题以前板块上出现过一次了,这里是一个陷阱。

当你直接用time的时候调用的是bash的内置命令,是不能重定向的:
  1. $type time
  2. time is a shell keyword
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-6-1 20:07:04 | 显示全部楼层
http://www.linuxsir.cn/bbs/showt ... +%E5%AE%9A%E5%90%91

{ { time ping xxx; } 2>ttt.log ;} >ppp.log

应该简化为

{ time command; } >log1 2>log2
回复 支持 反对

使用道具 举报

发表于 2006-6-1 20:08:14 | 显示全部楼层
哈,hellwolf比我早一步。
回复 支持 反对

使用道具 举报

发表于 2006-6-1 20:23:30 | 显示全部楼层
你那个帖子说

但道理却不是我说的那个道理(输出到/dev/tty)


time的输出是直接打印到/dev/tty,不是吗?
回复 支持 反对

使用道具 举报

发表于 2006-6-1 20:46:05 | 显示全部楼层
\time可以避免keyword,直接调用外部命令,bash(1)中提到吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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