好的,我有以下脚本可以更新Route43 DNS条目。不幸的是,您每秒钟所能发出的调用次数有限制,因此我需要让最终的Xargs命令在每次迭代之间睡眠约一秒钟。
我尝试了一些方法,比如“{../cli53 blah; sleep 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提供的答案。以下是我的解决方案,供其他需要的人参考:
我还得在xargs语句中加入-I %variable%开关,以确保输入的信息作为参数传递给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"; }'
myvar
未被引用。它们并没有对外部单引号字符串中myvar
扩展进行单引号处理。请改用双引号来包裹myvar
。或者,可以使用脚本的位置参数。 - Etan Reisner