4

複数の Web スクレイピング (curl などを使用) を実行するための bash 関数を作成しようとしています。それらをすべてバックグラウンドで同時に実行し、すべての出力を stdin に出力したいと考えています。これはどのように可能ですか?

4

2 に答える 2

8

それは簡単なものです!関数&でも使用できます。

#!/usr/bin/bash

x() { echo =$1=Solaris; sleep 1; echo =$1=East; sleep 1; echo =$1=Panta Rhei;}

x one&
x two&

echo Syrius; sleep 1
echo After Crying 

出力:

=one=Solaris
Syrius
=two=Solaris
=one=East
=two=East
After Crying

Press ENTER or type command to continue
=one=Panta Rhei
=two=Panta Rhei

はバックグラウンドxで実行され、に出力されstdoutます。これはPress ENTER or type command to continueによって提示され( からスクリプトを開始したため)、メイン スクリプトが終了した後にバックグラウンドプロセスがジョブを終了することを示しています。すべてのバックグラウンド プロセスが終了するまで待ちたい場合は、 を使用してバックグラウンド プロセスの PID を取得し、最後の関数としてビルトインを使用できます。x$!wait <PID>

于 2013-06-26T07:16:55.903 に答える
2

一緒に来る他の人のために:

以下を考えると:

function par() {
    parallel sh -c ::: "sleep 1" "sleep 1" "sleep 1"
}

function seq() {
    sleep 1
    sleep 1
    sleep 1
}

両方のコマンドのタイミングを見ると、最初の関数が一度にすべて実行され、2 番目の関数が各コマンドが終了するのを待ってから次のコマンドに進むことがわかります。

$ time par && time seq

real    0m1.215s
user    0m0.147s
sys     0m0.085s

real    0m3.028s
user    0m0.011s
sys     0m0.012s

幸福!

于 2013-06-26T06:35:06.820 に答える