2010-10-10 52 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

相关问题