2010-10-10 97 views
0

我想回顯文本並遠程ping計算機,並將輸出發送到日誌文件。我還需要並行執行此操作,但我在輸出如何發送到日誌文件時遇到了一些問題。如何回顯文本並將命令輸出並行發送到文件

我想輸出看起來像: 主機| hostTo | ping命令的結果

但因爲我有這個運行作爲後臺進程是輸出: 主機hostTo主機hostTo RTT RTT RTT 等等

有沒有辦法讓這是一個後臺進程,但它使回聲是該進程的一部分,所以日誌文件沒有失序?

這裏是我的腳本,在此先感謝!

for host in `cat data/ips.txt`; do 
echo -n "$host "; 
for hostTo in `cat data/ips.txt`; do 
{ 
    echo -n "$host $hostTo " >> logs/$host.log; 
    (ssh -n -o StrictHostKeyChecking=no -o ConnectTimeout=1 -T [email protected]$host ping -c 10 $hostTo | tail -1 >> logs/$host.log) & 

}; 
done; 
done 
+0

[寫入stdout和文件](http://stackoverflow.com/questions/3661070/writing-to-both-stdout-a-file)和[複製標準輸出到文件而不停止顯示屏幕](http://stackoverflow.com/questions/1356706/copy-stdout-to-file-without-stopping-it-showing-onscreen) – Ether 2010-10-10 23:13:27

+0

假設ips.txt包含每行一個IP地址,您可以避免UUOC用'while read -r host';做...;完成 Benoit 2010-10-11 08:24:13

+0

謝謝,我嘗試了Pioulard先生。 – Isawpalmetto 2010-10-11 12:26:39

回答

2

可以用awk做到這一點。你基本要問的是如何同時打印主機和結果。

即。刪除回聲線,並進行以下更改:

ssh .... ping -c 10 $hostTo | awk -v from=$host -v to=$hostTo 'END {print from, to, $0}' >> logs/${host}.log

注意tail實際上被內部awk也做。在awk中包含shell var往往是PITA,也許有一種更簡單的方法可以在沒有所有轉義和引用的情況下執行它。 [更新:在awk中指定var]

PS。你的問題的標題有點不清楚,它聽起來像你想要將你的程序輸出同時顯示和顯示文件。

+1

'awk -v awkvar = $ shellvar'END {printf awkvar}'' – 2010-10-11 03:49:44

+0

@丹尼斯,謝謝!更新。 – fseto 2010-10-11 07:05:58

+0

我在awk部分使用''「$ host」'「解決了這個問題,但這似乎是一回事。謝謝! – Isawpalmetto 2010-10-11 12:39:15

相關問題