我有这个
#! /bin/bash
cd ~
hostname=`hostname`
cat /opt/ip.txt | while read line;
do
# do something with $line here
RES=`ping -c 2 -q $line | grep "packet loss"`
echo "---" >> /opt/os-$hostname.txt
echo "---"
echo "$line $RES" >> /opt/os-$hostname.txt
echo "$line $RES"
done
如何使脚本成为多线程的?我想加快性能。
最佳答案
您可以使用 <(...)
用于启动子进程的符号,然后是 cat
所有的输出在一起:
myping() {
ping -c 2 -q "$1" | grep "packet loss"
}
cat <(myping hostname1) <(myping hostname2) ...
要为此使用循环,您需要先构建命令:
cat /opt/ip.txt | {
command='cat'
while read line
do
command="$command "'<'"(myping $line)"
done
eval "$command"
}
如果你真的想要定界 ---
你原来的,我建议添加一个echo "---"
在myping
.
如果您还想将输出附加到文件中,请使用 tee
:
eval "$command" | tee -a /opt/os-$hostname.txt
关于linux - 多线程ping脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731904/