Shell Scripting:使用xargs执行shell函数的并行实例

Gna*_*ats 12 bash shell xargs

我试图使用xargs的在shell脚本来运行我在同一个脚本中定义一个函数的并行实例.该函数次页面的抓取,所以很重要的是,网页实际上是在并行处理同时获取,而不是在后台进程(如果我的这种认识是错误的,还有两者之间的微小差别,只是让我知道) .

功能是:

function time_a_url ()
{
     oneurltime=$($time_command -p wget -p $1 -O /dev/null 2>&1 1>/dev/null | grep real | cut -d" " -f2)
     echo "Fetching $1 took $oneurltime seconds."
}
Run Code Online (Sandbox Code Playgroud)

怎样才能用,可以采取的次数并行运行time_a_url作为自变量的形式xargs的管做到这一点?是的,我知道GNU平行的,我只是没有安装在那里我写这个软件的特权.

Pau*_*ce. 12

这是一个如何使您的功能工作的演示:

$ f() { echo "[$@]"; }
$ export -f f
$ echo -e "b 1\nc 2\nd 3 4" | xargs -P 0 -n 1 -I{} bash -c f\ \{\}
[b 1]
[d 3 4]
[c 2]
Run Code Online (Sandbox Code Playgroud)

以使这项工作的关键在于export功能使bashxargs产卵会看到它,并逃脱了函数名和逃脱括号之间的空间.你应该能够适应这种情况在你的情况下工作.您需要调整-P-n(或删除它们)的参数以满足您的需要.

你可以摆脱grepcut.如果您正在使用Bash内置time,则可以使用该TIMEFORMAT变量指定输出格式.如果您使用的是GNU /usr/bin/time,则可以使用该--format参数.这些中的任何一个都可以让你掉落-p.

您可以替换wget命令的这一部分:2>&1 1>/dev/nullwith -q.在任何情况下,你都有逆转.正确的顺序是>/dev/null 2>&1.