私のbashスクリプトを簡単に並列化できるようにするために、この機能を取得しようとしています。アイデアは単純です。各コマンドを順番に実行する代わりに、実行したいコマンドをこの関数にパイプします。私のためにバックグラウンドでジョブを実行し、ロジスティクスを処理します....しかし、うまくいきません。set -x by where stuff's execute を追加しましたが、実行したいものの周りに奇妙な引用符が表示されているようです...どうすればよいですか?
runParallel () {
    while read line
    do
        while [ "`jobs | wc -l`" -eq 8 ]
        do
            sleep 2
        done
        {
            set -x
            ${line}
            set +x
        } &
    done
    while [ "`jobs | wc -l`" -gt 0 ] 
    do
        sleep 1
        jobs >/dev/null 2>/dev/null
        echo sleeping
    done
}
for H in `ypcat hosts | grep fmez | grep -v mgmt | cut -d\  -f2 | sort -u`
do
    echo 'ping -q -c3 $H 2>/dev/null 1>/dev/null && echo $H - UP || echo $H - DOWN'
done | runParallel
実行すると、次のような出力が得られます。
> ./myscript.sh
+ ping -q -c3 '$H' '2>/dev/null' '1>/dev/null' '&&' echo '$H' - UP '||' echo '$H' - DOWN
Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
            [-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
            [-M mtu discovery hint] [-S sndbuf]
            [ -T timestamp option ] [ -Q tos ] [hop1 ...] destination
+ set +x
sleeping
>