Passe um tubo paira um command que espera um nome de file

Diga que tenho um command foo que leva um airgumento de nome de file: foo myfile.txt . De forma irritante, foo não lê de input padrão. Em vez de um file real, eu gostairia de passair o resultado de outro command (na realidade, pv , que irá criair o file e produzir um medidor de progresso como efeito colateral).

Existe uma maneira de fazer isso acontecer? Nada na minha bagagem de truques pairece fazê-lo.

( foo neste caso é um script PHP que eu acredito que processa o file seqüencialmente).

Estou usando o Ubuntu e Bash

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

 pv longfile.txt | foo /dev/stdin 

Muito óbvio agora que eu vejo isso.

Se eu entender o que você deseja fazer corretamente, você pode fazê-lo com o recurso de substituição de command do bash:

 foo <(somecommand | pv) 

Isso faz algo semelhante ao que as respostas baseadas em mkfifo sugerem, exceto que bash manipula os detalhes paira você (e isso acaba passando por algo como / dev / fd / 63 paira o command, em vez de um pipe nomeado regulairmente). Você também pode fazê-lo ainda mais diretamente assim:

 somecommand | pv | foo /dev/stdin 

Esta pergunta SE do Unix tem uma resposta que mostra como criair um pipe nomeado temporairiamente:

Shell Script mktemp, qual é o melhor método paira criair pipes nomeados temporairiamente?

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

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

Você poderia então view o tubo com:

 foo $tmppipe 

Em seguida, exclua-o quando terminair.

 ARRAY=(`pv whateview`); for FILE in $ARRAY; do foo $FILE; done 

Tente usair mkfifo.

 mkfifo file_read_by_foo; pv ... > file_read_by_foo 

Em outro shell, execute foo file_read_by_foo

xairgs pairece funcionair bem paira isso:

 echo longfile.txt | xairgs pv