Bash Xargs Sleep(多个命令行参数)
Bash Xargs Sleep (Multiple Command Line Arguments)
好的,我有以下更新 Route43 DNS 条目的脚本。不幸的是,每秒可以调用的次数是有限制的,所以我需要让最终的 Xargs 命令在每次迭代之间休眠大约一秒钟。
我已经尝试了一些东西,比如'{../cli53 blah;睡 10; } ' 而且我似乎无法让它工作。请问大家有什么建议吗:
#!/bin/bash
set root='dirname [=11=]'
ec2-describe-instances -O ******* -W ******* --region eu-west-1 |
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/
and do { $dns = ; print " $dns\n" }; /^TAG.+\sName\s+(\S+)/
and print " $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 %variable% 开关包含到 xargs 语句中,以确保将输入作为参数传递给 cli53,但现在看起来一切正常。
#!/bin/bash
set root='dirname [=12=]'
ec2-describe-instances -O ******* -W ******* --region eu-west-1 |
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/
and do { $dns = ; print " $dns\n" }; /^TAG.+\sName\s+(\S+)/
and print " $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"; }'
最简单的解决方案是简单地将 cli53
和 sleep
调用放在脚本中并使用 xargs
来执行脚本。
如果你不想那样做,你应该可以用这个做你想做的事情:
... | xargs ... /bin/sh -c '{ /usr/local/bin/cli53 ... "$@"; sleep 10; }' -
好的,我有以下更新 Route43 DNS 条目的脚本。不幸的是,每秒可以调用的次数是有限制的,所以我需要让最终的 Xargs 命令在每次迭代之间休眠大约一秒钟。
我已经尝试了一些东西,比如'{../cli53 blah;睡 10; } ' 而且我似乎无法让它工作。请问大家有什么建议吗:
#!/bin/bash
set root='dirname [=11=]'
ec2-describe-instances -O ******* -W ******* --region eu-west-1 |
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/
and do { $dns = ; print " $dns\n" }; /^TAG.+\sName\s+(\S+)/
and print " $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 %variable% 开关包含到 xargs 语句中,以确保将输入作为参数传递给 cli53,但现在看起来一切正常。
#!/bin/bash
set root='dirname [=12=]'
ec2-describe-instances -O ******* -W ******* --region eu-west-1 |
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/
and do { $dns = ; print " $dns\n" }; /^TAG.+\sName\s+(\S+)/
and print " $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"; }'
最简单的解决方案是简单地将 cli53
和 sleep
调用放在脚本中并使用 xargs
来执行脚本。
如果你不想那样做,你应该可以用这个做你想做的事情:
... | xargs ... /bin/sh -c '{ /usr/local/bin/cli53 ... "$@"; sleep 10; }' -