如何回显文本并将命令输出并行发送到文件

时间:2010-10-10 22:19:58

标签: bash unix scripting shell

我想回显文本并远程ping计算机并将输出发送到日志文件。我还需要并行执行此操作,但是我在输出如何发送到日志文件时遇到了一些麻烦。

我希望输出看起来像: 主持人| hostTo | ping命令的结果

但由于我将此作为后台进程运行,因此输出: host hostTo host 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 username@$host ping -c 10 $hostTo | tail -1 >> logs/$host.log) &

 };
done; 
done

1 个答案:

答案 0 :(得分:2)

可以使用awk执行此操作。您基本上要问的是如何同时打印主机以及结果。

即。删除带有echo的行并更改以下内容:

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。您的问题的标题有点不清楚,听起来好像您想要将程序输出同时传输到显示和文件。