Script carrega dois argumentos

3

Eu tenho o script perl que precisa de dois argumentos, por exemplo:

./PerlScript 0001 192.168.100.200

Mas preciso executar esse script mais vezes (40x).

./PerlScript 0003 192.168.100.202
./PerlScript 0061 192.168.100.205
./PerlScript 0061 192.168.100.206
...
...
...

Eu preciso inserir argumentos automaticamente após o PerlScript e como fazê-lo? Carregar de arquivo ou criar matriz?

    
por Jan Blaha 11.05.2017 / 15:12

2 respostas

3

digamos que sua lista de argumentos esteja em um arquivo "thelist" assim:

0001 192.168.100.200
0003 192.168.100.202
0061 192.168.100.205
0061 192.168.100.206

Você poderia:

printf "./PerlScript %s %s\n" $(cat thelist) | bash

Note que se você fizer isso (como no seu exemplo): eles são executados sequencialmente.

mude para

printf "./PerlScript %s %s & \n" $(cat thelist) | bash

para que eles sejam lançados em segundo plano (mas cuidado para não colocar sua máquina de joelhos ...)

    
por 11.05.2017 / 15:27
0

A maneira apropriada de fazer isso, se os argumentos forem armazenados em um arquivo, é usar xargs .

O utilitário xargs executa outro programa com argumentos lidos de sua entrada padrão.

com

xargs -n 2 ./PerlScript <list.in

xargs executaria ./PerlScript com dois argumentos por vez ( -n 2 ) com os argumentos retirados do arquivo list.in no diretório atual.

O arquivo list.in pode ser

0001 192.168.100.200
0003 192.168.100.202
0061 192.168.100.205
0061 192.168.100.206

ou

0001
192.168.100.200
0003
192.168.100.202
0061
192.168.100.205
0061
192.168.100.206

xargs também pode ler os argumentos de um canal:

somecommand | xargs -n 2 ./PerlScript

Aqui, somecommand é algum comando que gera saída na mesma forma que o list.in usado no exemplo anterior.

    
por 08.04.2018 / 13:40