Bash Xargs Sleep (Несколько Аргументов Командной Строки)
Итак, у меня есть следующий скрипт, который обновляет записи DNS Route43. К сожалению, существует ограничение на количество вызовов в секунду, которое вы можете сделать, поэтому мне нужно сделать последнюю команду Xargs спящей примерно на секунду между каждой итерацией.
Я попробовал пару вещей, таких как ' {../ cli53 blah; sleep 10;} " и я, кажется, не могу заставить его работать. У кого-нибудь есть предложения, пожалуйста:
#!/bin/bash
set root='dirname $0'
ec2-describe-instances -O ******* -W ******* --region eu-west-1 |
perl -ne '/^INSTANCEs+(i-S+).*?(S+.amazonaws.com)/
and do { $dns = $2; print "$1 $dnsn" }; /^TAG.+sNames+(S+)/
and print "$1 $dnsn"' |
perl -ane 'print "$F[0] CNAME $F[1] --replacen"' |
grep -v 'i-' | xargs --verbose -n 4 /usr/local/bin/cli53 rrcreate -x 5 contoso.com
Edit: спасибо Этан за ответ. Вот мое решение для всех остальных это необходимо:
Мне пришлось включить переключатель-I %variable% в оператор xargs aswel, чтобы убедиться, что поток был передан в качестве параметров cli53, но теперь все это работает хорошо.
#!/bin/bash
set root='dirname $0'
ec2-describe-instances -O ******* -W ******* --region eu-west-1 |
perl -ne '/^INSTANCEs+(i-S+).*?(S+.amazonaws.com)/
and do { $dns = $2; print "$1 $dnsn" }; /^TAG.+sNames+(S+)/
and print "$1 $dnsn"' |
perl -ane 'print "$F[0] CNAME $F[1] --replacen"' |
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 "nn"; }'
1 ответ:
Самым простым решением было бы просто поместить вызовы
cli53иsleepв сценарий и использоватьxargsдля выполнения сценария.Если вы не хотите этого делать, вы должны быть в состоянии сделать то, что вы пытались сделать с этим:
... | xargs ... /bin/sh -c '{ /usr/local/bin/cli53 ... "$@"; sleep 10; }' -
Comments