2013-01-20 25 views
1

這個問題通過克里斯 - 約翰遜來自臨bash編程第2章練習2如何將標準輸出同時重定向到變量和文件?

寫一個腳本,使用$ RANDOM,下面的輸出同時編寫到一個文件,一個變量。以下數字僅用於顯示格式;你的腳本應該產生不同的數字:

1988.2365 
13798.14178 
10081.134 
3816.15098 

這裏是我的解決方案:

printf -v var "%5d.%-5d\n" $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM $RANDOM > FILE 

看來,輸出直接進入VAR,文件是空的。

我的問題是,有沒有辦法將標準輸出重定向到變量和文件在同一時間

回答

4

你可以寫:

var="$(printf '%5d.%-5d\n' $RANDOM ... | tee FILE)" 

使用the tee command以「分裂」的標準輸出,使之既去到FILE和成可以使用command substitution您的變量被捕獲的新標準輸出。

+0

非常感謝,有效! – 47dev47null

+0

@ 47dev47null:不客氣! – ruakh

+0

@ 47dev47null通過腳本或者通過命令行爲您完成這項工作嗎?如果我在命令行中輸入這個名稱,它會「有效」,儘管var中的文本格式不正確(沒有換行符,只是每個數字之間有空格)。但是,如果我在腳本中執行完全相同的命令(相同的命令,但是文件的頂部有#!/ bin/bash),那麼隨後var就是空的。如果我從腳本內部打印var,那沒問題。任何想法爲什麼var不會在運行腳本後保持設置?謝謝! –

相關問題