número flexível de agruments com xargs

0

É possível especificar o número de argumentos que xargs toma sem fazer isso explicitamente com a opção -n , mas implicitamente com um delimitador, para que os parâmetros únicos sejam delimitados por um espaço, mas um grupo de argumentos que os xargs serão imediatamente delimitados com, por exemplo, '\n' ?

Eu quero ser capaz de passar um número flexível de parâmetros para um script: Esses parâmetros são armazenados em uma lista como esta:

param1 param2
param1 param2 param3
param1

Deve ser possível passar uma linha de parâmetros de cada vez para o script. Eu não quero usar scripts de proxy e eu não quero escrever uma lista temporária de arquivos ou comando para o disco. Quero ler os parâmetros do arquivo, alterá-los "on the fly" (por exemplo, remover todas as outras linhas) e redirecioná-los com xargs para o script de destino.

O que tentei é usar '\n' como um delimitador de argumentos, mas que todos os parâmetros em uma linha são interpretados como um argumento, mesmo que sejam delimitados por um espaço.

    
por crenate 14.01.2012 / 12:43

2 respostas

0

Q

Want I want to achieve is to pass the following list through xargs but one line at a time:

A

$ cat t7.txt
param1 param2
param1 param2 param3
param1

$ cat t7.sh
#!/bin/bash
cat t7.txt | while read line
do
  echo $line | xargs echo XXX
done

$ ./t7.sh
XXX param1 param2
XXX param1 param2 param3
XXX param1

Mas há maneiras mais fáceis de alcançar essa saída sem usar xargs, então você pode querer esclarecer sua dúvida.

Atualizar

$ while read line; do echo "< $line >"; done
p1 p2
< p1 p2 >
p1
< p1 >
p1 p2 p3
< p1 p2 p3 >

Eu não acho que xargs seja a resposta para sua tarefa. Eu suspeito que seria melhor usar algum script no lugar de xargs.

    
por 14.01.2012 / 15:29
1

Com o GNU Parallel você pode fazer:

cat yourfile | parallel -q bash -c 'echo {}'

Se for aceitável que os parâmetros sejam unidos como um, você pode até fazer:

cat yourfile | parallel echo {}

Você pode instalar o GNU Parallel simplesmente por:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Assista aos vídeos de introdução do GNU Parallel para saber mais: link

    
por 14.01.2012 / 20:56

Tags