Uma maneira de fazer isso:
echo "a b c" | xargs printf -- '-f %s\n' | xargs mycommand
Isso pressupõe que a
, b
e c
não contêm espaços em branco, novas linhas, citações ou barras invertidas. :)
Com o% GNUfindutil
você pode lidar com o caso geral, mas é um pouco mais complicado:
echo -n "a|b|c" | tr \| \0 | xargs -0 printf -- '-f... | xargs -x -0 mycommand
%secho "a b c" | xargs printf -- '-f %s\n' | xargs mycommand
' | xargs -0 mycommand
Você pode substituir o separador |
por outro caractere que não aparece em a
, b
ou c
.
Editar: como @MichaelMol observa, com uma lista muito longa de argumentos há um risco de transbordar o comprimento máximo de argumentos que podem ser passados para mycommand
. Quando isso acontecer, o último xargs
dividirá a lista e executará outra cópia de mycommand
, e há o risco de deixar um -f
não finalizado. Se você se preocupar com essa situação, poderá substituir o último xargs -0
acima por algo como isto:
echo -n "a|b|c" | tr \| \0 | xargs -0 printf -- '-f... | xargs -x -0 mycommand
%s%pre%' | xargs -0 mycommand
Isso não resolverá o problema, mas interromperá a execução de mycommand
quando a lista de argumentos ficar muito longa.