Как мне запустить команду curl для каждой строки вывода из моего скрипта Perl? - PullRequest
2 голосов
/ 16 ноября 2009

У меня есть Perl-скрипт, который записывает массив, заполненный целыми числами, в stdout, каждый в отдельной строке. Таким образом, я получил бы вывод как:

412
917
1
etc

То, что я хотел бы сделать, это иметь возможность передавать вывод этого скрипта в xargs и выполнять вызов curl, используя каждое целое число. Примерно так:

cat input.json | ./jsonValueExtracter.pl -s exampleId | xargs curl http://brsitv01:8080/exampleId/$1 > example$1.json

Ниже приведен отрывок из простого сценария, который я использую.

my @values;
while(<STDIN>) {
     chomp;
     s/\s+//g; # Remove spaces
     s/"//g; # Remove single quotes
     push @values, /$opt_s:(\w+),?/g;
}

print join(" \n",@values);

Однако, это не работает так, как я ожидал. Когда я запускаю следующую команду:

cat input.json | perl jsonValueExtracter.pl -s exampleId | xargs echo http://brsitv01:8080/exampleId/$1

Я получаю вывод:

http://brsitv01:8080/exampleId/ 412 917 1

Что-нибудь особенное, что мне нужно сделать, чтобы использовать вывод сценария perl в xargs?

Спасибо

Ответы [ 2 ]

5 голосов
/ 16 ноября 2009

xargs не использует $ 1 таким образом. $ 1 пусто, а xargs просто ставит числа в конце командной строки.

Возможно, вы хотите использовать bash для цикла вроде:

for i in `./jsonValueExtracter.pl -s exampleId < input.json`
do
  curl http://brsitv01:8080/exampleId/$i > example$i.json
done

Который можно записать в одну строку с точкой с запятой:

for i in `./jsonValueExtracter.pl -s exampleId < input.json`; do curl http://brsitv01:8080/exampleId/$i > example$i.json; done

Обратите внимание, что вам не нужен кот:

cat [file] | script.foo

Эквивалентно:

script.foo < [file]
5 голосов
/ 16 ноября 2009

Добавьте -n 1 к xargs, чтобы он использовал только один аргумент при каждом запуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...