多线程ping脚本

时间:2014-02-12 15:18:00

标签: linux multithreading bash shell unix

我有这个

#! /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

如何让脚本多线程化?我想加快表现。

2 个答案:

答案 0 :(得分:3)

您可以使用<(...)表示法启动子流程,然后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

答案 1 :(得分:-1)

已删除。 有用吗? BASH 中没有线程。