首先我要说的是,我仍在学习 bash 脚本,而且我不知道很多事情。如果我漏掉了什么,请随意骂我。
接下来,我将创建一个简单的 bash 脚本来运行 ping 到 2 个不同的主机并输出到文件。我已经解决了这个问题,并且正在发挥作用。出于好奇,我在脚本中添加了 ping 输出打印前后的输出日期,这样我就知道运行 ping 需要多长时间。我将 ping 设置为 1 秒间隔,10 次 ping,2 个主机。我的第一次约会(很久以前...)的时间戳是 14:36:20。第二个日期(ping 之后)的时间戳为 14:36:40。
因此,日期等待两个 ping 完成。这意味着 ping 是按顺序运行的。
我可以让它们同时运行,这样我就可以花 10 秒而不是 20 秒来运行脚本吗?
这是我的脚本片段:
date >> teste.txt
cat hosts.txt | while read output
do ping -c 10 -i 1 "$output" >> teste.txt
done
date >> teste.txt
我还希望这个脚本能完成其他几件事,但我保证只有在无法在 Barsa 上找到满意的答案时我才会询问。
PS:hosts.txt 是我存储要 ping 的主机的位置。
答案1
你的问题的措辞有点难以理解,但我认为你正在寻找类似的东西:
command &
command &
wait
该脚本将在后台执行这两个命令并等待响应。
但是,就您而言,您需要小心竞争条件。您可能希望将各个命令的输出发送到临时文件中,然后将它们放入主文件中,因此您可能会执行以下操作:
command > "${tmp1}" &
command > "${tmp2}" &
wait
cat "${tmp1}" "${tmp2}" >> "${main}"
rm -f "${tmp1}" "${tmp2}"
更新:您可以尝试 xargs (例如https://stackoverflow.com/questions/15755422/linux-bash-script-to-ping-multiple-hosts-simultaneously)
答案2
使用 GNU Parallel,您可以执行以下操作:
date >> teste.txt
cat hosts.txt | parallel -j0 ping -c 10 -i 1 {} >> teste.txt
date >> teste.txt