2012-03-13 105 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