2012-03-13 43 views
0

标题应解释所有。我有一个程序,其stdout需要很多才能完成 - 我想完全重定向输出到一个文件,但只有当输出完成并且命令关闭时。我怎样才能做到这一点?重定向命令输出到文件 - 仅当命令关闭标准输出时

非常感谢!

+0

[@jordanm](http://stackoverflow.com/a/9690605/96588)是正确的,但你应该问自己*为什么*你这样做。 Linux程序擅长处理数据流,如果在继续下一个命令之前不写入磁盘,程序将会*更快*。 – l0b0 2012-03-14 09:41:12

+0

这不是一个程序,它是一个1行脚本。目标是让zpool iostat输出写入一个我始终可以解析的文件。每5分钟总共有1次IO操作。相信我,这是有道理=) – cedivad 2012-03-16 20:36:49

+0

是的,这是一个完美的案例。有一个习惯指出,虽然它是常见的使用太多文件(TM):) – l0b0 2012-03-18 21:04:39

回答

1

要做到这一点,你需要存储的输出在一个变量中。如果输出非常大,我不建议这样做。

output=$(command) 
printf "$output" > logfile 
+0

谢谢。 (我应该自己来到这里) – cedivad 2012-03-13 19:22:11

+0

有时候过度考虑问题可能会导致我们错过简单的解决方案。 – jordanm 2012-03-13 19:27:03

+1

或者如果你不想要一个额外的尾随换行符(或者命令总是输出一个尾随的换行符),'echo -n“$ output”> logfile'。 – l0b0 2012-03-14 09:38:47

0

如果你的目标是具有两个终端上,并在文件中的输出:

NAME 
     tee - read from standard input and write to standard output and files 

SYNOPSIS 
     tee [OPTION]... [FILE]... 

DESCRIPTION 
     Copy standard input to each FILE, and also to standard output. 

(从man tee

+0

我不认为这是什么问题。 – jordanm 2012-03-13 19:20:46

+0

我的目标是将输出仅限于一个文件。我希望仅在命令完成时写入输入。考虑它我认为我可以简单地使用bash变量... – cedivad 2012-03-13 19:21:19

相关问题