background-pipe pipe-input

11

se eu quiser exibir "aaa" na tela:

(1)$: echo aaa | cat                 ... works OK
(2)$: echo aaa | ( cat )             ... works OK
(3)$: echo aaa | ( cat & )           ... NOT working
(4)$: ( echo aaa & ) | cat           ... works OK 
(5)$: echo aaa | ( cat <&0 & )       ... works ok in BASH (but not in SH)
(6)$: echo aaa | ( cat <&3 & ) 3<&0  ... works ok in BASH and SH

conclusão de (3) e (4) - > processo separado ainda tem saída conectada que pode ser controlada, usada, redirecionada ..., mas não entrada!

Minha pergunta é: alguém entende por que e como a linha (5) funciona ???

... "< & 0; é a abreviatura de" 0 < & 0 ", porque redirecionar 0 a 0 é a solução e o que realmente acontece por trás da entrada do processo destacado. Subshell não é o problema, usando chaves {...} ao invés de (...) fornecer os mesmos resultados.

... e question2: existe melhor solução para "dar entrada para processo separado" do que a linha (6).

    
por Asain Kujovic 04.04.2013 / 18:35

1 resposta

10

Sim, conforme exigido pelo POSIX , os comandos foram iniciados em segundo plano com & tem sua entrada padrão redirecionada de /dev/null .

E, de fato,

{ cmd <&3 3<&- & } 3<&0

é a maneira mais óbvia de contornar isso.

Não está claro por que você gostaria de executar parte do pipeline em segundo plano.

    
por 04.04.2013 / 19:42