Faça xargs passar um sinalizador de stdin em vez do parâmetro de comando

0

Dado um aplicativo, myApplication , que transmite linhas para stdout

$ myApplication
flag1
flag2
flag3

Como uso o xargs para passar esses valores como sinalizadores para um comando em vez de passá-los como parâmetros?

Por exemplo, as invocações resultantes devem ser:

anotherApplication --flag "flag1" parameterNotFromXargs
anotherApplication --flag "flag2" parameterNotFromXargs
anotherApplication --flag "flag3" parameterNotFromXargs

Minha tentativa falhada usando a opção -I produziu a saída errada:

$ myApplication | xargs -L1 -I % echo "e: %"
e: %
e: %
e: %
    
por Ramon J Romero y Vigil 13.09.2018 / 19:01

2 respostas

0

Não é possível replicar:

$ echo -e "one\ntwo\nthree" | xargs -L1 -I% echo "I was told % times"
I was told one times
I was told two times
I was told three times

Se myApplication estiver retornando sua saída na entrada padrão, a chamada acima de xargs deverá funcionar corretamente. Se a saída que você está vendo for, na verdade, erro padrão, você precisará redirecioná-la para a saída padrão com myApplication 2>&1 .

    
por 13.09.2018 / 19:06
0

A maneira mais fácil é um script

#!/bin/sh
anotherApplication --flag "$1" parameterNotFromXargs

E chame-o com

myApplication | xargs -L1 ./myscript.sh

Se você quiser evitar o script, você pode usar o comando inline:

myApplication | xargs -L1 sh -c 'anotherApplication --flag "$1" parameterNotFromXargs' _
    
por 13.09.2018 / 19:24

Tags