我有一个 perl 脚本,它写出一个充满整数的数组到标准输出,每个都在单独的一行上。所以我会得到如下输出:
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
要在 xargs 中使用 perl 脚本的输出,我需要做什么特别的事情吗?
谢谢
最佳答案
xargs 不会那样使用 $1。 $1 是空白,xargs 只是将数字放在命令行的末尾。
你可能想像这样使用 bash for 循环:
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]
关于unix - 如何为 Perl 脚本的每一行输出运行 curl 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741900/