Como redirecionar o stdout da direita para a esquerda

7

Isso funciona perfeitamente:

./foo | ./bar

Mas eu gostaria de algo assim:

./bar <| ./foo

Então eu posso fazer o contrário e mudar os argumentos do foo mais rapidamente na linha de comando.

O canal precisa ser em tempo real - meu programa foo nunca retorna.

Isso é possível?

    
por Bilow 03.10.2016 / 11:58

2 respostas

9

Uma maneira simples e apropriada pode ser definir uma função foobar,

foobar () { ./foo "$@" | ./bar ; }

(na linha de comando, conforme necessário, ou em alguns scripts de inicialização, como ".bashrc", por exemplo).  Então, sempre que você fizer:

foobar "this"  that   "and this also"

fará

./foo  this   that   "and this also" | ./bar
    
por 03.10.2016 / 16:03
4

Acho que você poderia fazer algo assim com um pipe nomeado:

mypipe=$(mktemp -d /tmp/XXXXXX)/pipe
mkfifo $mypipe
grep something < $mypipe & tail > $mypipe -f  some_input_file 
rm $mypipe

ou coloque a parte imutável do comando em um script de shell:

./foo "$@" | ./bar

e forneça os argumentos para foo na linha de comando do script:

./myscript <args to foo>
    
por 03.10.2016 / 12:08

Tags