在文件大小达到限制或被其他条件取消之前,是否有人知道如何将输出传输到文件?这可能吗?
如何使用filesize,time duration等条件取消将输出写入文件('$ cmd>> file.txt 2>& 1')?
编辑:我启动一个应用程序,我需要前1000行输出,而不需要停止应用程序本身!不希望记录完整的应用程序生命周期。
答案 0 :(得分:3)
示例:
seq 10000 | tee -i somefile | head -n 1000
这会将seq中的所有数据捕获到somefile中,1000行将打印到stdout。你必须使用tee -i忽略中断,否则当头部结束时它会中断tee,这会中断seq。
答案 1 :(得分:1)
对于时间限制,请使用timeout
。对于大小限制,请使用tee --max-bytes
。
如果你要寻找的是日志文件管理,你应该考虑使用rsyslogd
来处理日志轮换,大小,时间等。
答案 2 :(得分:1)
我需要前1000行输出,而不需要停止应用程序本身!
1)
我认为一种简单的方法是使用两个规则来管道sed
。第一条规则' 1,1000w head-lines.txt'用于保存到文件head-lines.txt,第二个规则用于打印。
首先写入1000行文件,打印所有行:
$ seq 1000000000000 | sed -n -e '1,1000w head-lines.txt' -e '1,$p'
首先写入1000行文件,打印所有行,从1001开始:
$ seq 1000000000000 | sed -n -e '1,1000w head-lines.txt' -e '1001,$p'
参考文献:
2)
更复杂的方法是在bash中处理SIGPIPE。在bash中,我将运行seq 100000000
,它在我的服务器上运行很长时间,并且只在文件中输出前1000行:
$ trap "" SIGPIPE && seq 100000000 2>/dev/null | head -n 1000 > your.log
当head
获得前1000行时,它将结束,通常SIGPIPE将被发送到seq
。但是我调用trap
来忽略SIGPIPE:
$ help trap
trap: trap [-lp] [[arg] signal_spec ...]
Trap signals and other events.
If ARG is the null string each SIGNAL_SPEC is ignored by the
shell and by the commands it invokes.