linux - 多线程ping脚本

标签 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

如何使脚本成为多线程的?我想加快性能。

最佳答案

您可以使用 <(...)用于启动子进程的符号,然后是 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/

相关文章:

linux - 有什么方法可以在 Linux 中将应用程序作为屏幕保护程序运行

python - 写入后中止缓慢刷新到磁盘?

c++ - 从 3 个线程访问 std::deque

linux - 有没有我可以以非 root 用户身份运行的命令,以查看用户是否可以运行某个 sudo 命令

linux - 如何使用 grep(或其他 LSB 工具)计算 .po 中的空翻译?

c - objdump -t/usr/bin/sort 命令不显示任何符号

linux - Linux Ubuntu 中不可删除的文件?

c - 哪个线程持有锁

multithreading - 互斥体、原子和栅栏 : what offers the best tradeoff and portability ? C++11

java - 无法在 Linux 中运行简单的 bash 命令,权限被拒绝