我正在尝试使用bash函数来执行多个Web抓取(使用curl等),我想让它们全部在后台执行,并且所有打印输出到stdin。这怎么可能?
答案 0 :(得分: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
。 Press ENTER or type command to continue
由vim呈现(当我从vim开始编写脚本时),并显示后台x
进程在主脚本完成后完成其作业。如果您想等到所有后台进程完成,您可以使用$!
获取后台进程的PID,并将内置wait <PID>
作为最后一个函数。
答案 1 :(得分:2)
对于其他任何人来说:
鉴于以下内容:
function par() {
parallel sh -c ::: "sleep 1" "sleep 1" "sleep 1"
}
function seq() {
sleep 1
sleep 1
sleep 1
}
两个命令的时序显示第一个函数一次执行,而第二个函数等待每个命令完成,然后继续下一个:
$ time par && time seq
real 0m1.215s
user 0m0.147s
sys 0m0.085s
real 0m3.028s
user 0m0.011s
sys 0m0.012s
快乐!