複数の Web スクレイピング (curl などを使用) を実行するための bash 関数を作成しようとしています。それらをすべてバックグラウンドで同時に実行し、すべての出力を stdin に出力したいと考えています。これはどのように可能ですか?
質問する
7487 次
2 に答える
8
それは簡単なものです!これには、 bash関数&
でも使用できます。
#!/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
ます。これはvimPress ENTER or type command to continue
によって提示され( vimからスクリプトを開始したため)、メイン スクリプトが終了した後にバックグラウンドプロセスがジョブを終了することを示しています。すべてのバックグラウンド プロセスが終了するまで待ちたい場合は、 を使用してバックグラウンド プロセスの 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 に答える