我有这个
#! /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
如何让脚本多线程化?我想加快表现。
答案 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 中没有线程。