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