Passa um pipe para um comando que espera um nome de arquivo

16

Digamos que eu tenha um comando foo , que aceita um argumento de nome de arquivo: foo myfile.txt . Irritantemente, foo não lê a entrada padrão. Em vez de um arquivo real, eu gostaria de passar o resultado de outro comando (na verdade, pv , que vai catar o arquivo e gerar um medidor de progresso como efeito colateral).

Existe uma maneira de fazer isso acontecer? Nada na minha bolsa de truques parece fazer isso.

( foo neste caso é um script PHP que acredito que processe o arquivo sequencialmente).

Estou usando o Ubuntu e o Bash

EDIT Desculpe pela descrição do problema um pouco clara, mas aqui está a resposta que faz o que eu quero:

pv longfile.txt | foo /dev/stdin

Muito óbvio agora que vejo isso.

    
por Steve Bennett 14.06.2012 / 01:42

5 respostas

14

Se eu entendi o que você quer fazer corretamente, você pode fazê-lo com o recurso de substituição de comando do bash:

foo <(somecommand | pv)

Isto faz algo semelhante ao que as respostas mkfifo -based sugerem, exceto que o bash manipula os detalhes para você (e acaba passando algo como / dev / fd / 63 para o comando, ao invés de um pipe nomeado regular ). Você também pode fazer isso de maneira ainda mais direta assim:

somecommand | pv | foo /dev/stdin
    
por 14.06.2012 / 07:43
2
ARRAY=('pv whatever'); for FILE in $ARRAY; do foo $FILE; done
    
por 14.06.2012 / 02:13
2

Esta questão Unix SE tem uma resposta que mostra como criar um pipe nomeado temporário:

Shell Script mktemp , qual é o melhor método para criar pipe nomeado temporário?

Com base nas respostas, você pode fazer algo como o seguinte:

tmppipe=$(mktemp -u)
mkfifo -m 600 "$tmppipe"
pv examplefile > $tmppipe

Você pode assistir ao pipe com:

foo $tmppipe

Em seguida, exclua quando terminar.

    
por 14.06.2012 / 02:14
1

Tente usar o mkfifo.

mkfifo file_read_by_foo; pv ... > file_read_by_foo 

Em outro shell, execute foo file_read_by_foo

    
por 14.06.2012 / 01:57
0

xargs parece funcionar bem para isso:

echo longfile.txt | xargs pv
    
por 14.06.2012 / 01:53