使用反引号的Bash命令在xargs内部

5
  echo $TMPLIST | xargs -I{} -n 1 -P $MAXJOBS curl -o {}_$DATESTRING.dump `get-temp-url --location {}`

$TMPLIST包含一个需要处理的位置列表。 我试图运行类似上面的代码,但是反引号内部的括号没有被扩展。我做错了什么?


为什么要做这么复杂的事情?循环遍历它的方式不更易读吗? - fedorqui
@fedorqui的'SOstopharming',这种xargs用法是并行处理中最简洁的方式之一(请注意-P参数)。 - KT.
1个回答

5

In this command...

echo $TMPLIST | 
xargs -I{} -n 1 -P $MAXJOBS curl -o {}_$DATESTRING.dump \
  `get-temp-url --location {}`

反引号是由shell解释的,xargs永远不会看到它们。你可以像这样做:

echo $TMPLIST | 
xargs -I{} -n 1 -P $MAXJOBS \
  sh -c 'curl -o {}_$DATESTRING.dump `get-temp-url --location {}`'

请注意,为了使此方法起作用,DATESTRING需要成为环境变量,而不是一个 shell 变量(例如,您需要执行 export DATESTRING)。

太好了,谢谢你提醒将变量设置为环境变量。 - pmilb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接