Bash Xargs Sleep(多命令行参数)

时间:2015-05-11 11:04:44

标签: bash sleep xargs

好的,我有以下脚本更新Route43 DNS条目。不幸的是,你可以制作的每秒调用次数有限,因此我需要让最终的Xargs命令在每次迭代之间休眠大约一秒钟。

我尝试了几件事,比如'{../cli53 blah;睡10我似乎无法让它发挥作用。有没有人有任何建议请:

#!/bin/bash

set root='dirname $0'
ec2-describe-instances -O ******* -W ******* --region eu-west-1 |
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sName\s+(\S+)/
and print "$1 $dns\n"' |
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' |
grep -v 'i-' | xargs --verbose -n 4 /usr/local/bin/cli53 rrcreate -x 5 contoso.com

编辑:感谢Etan的回答。以下是我需要它的其他人的解决方案:

我必须将-I%变量%开关包含在xargs语句aswel中,以确保将输入作为参数传递给cli53,但现在它们看起来都很好用了。

#!/bin/bash

set root='dirname $0'
ec2-describe-instances -O ******* -W ******* --region eu-west-1 |
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sName\s+(\S+)/
and print "$1 $dns\n"' |
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' |
grep -v '^i-' |
xargs --verbose -n 4 -I myvar /bin/sh -c '{ /usr/local/bin/cli53 rrcreate -x 5 contoso.com 'myvar'; sleep 1; printf "\n\n"; }'

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是简单地将cli53sleep调用放入脚本中,并使用xargs来执行脚本。

如果你不想这样做,你应该能够做你想做的事情:

... | xargs ... /bin/sh -c '{ /usr/local/bin/cli53 ... "$@"; sleep 10; }' -