Comportamento básico de bash [closed]

0

Eu esperava

echo |

para fazer o seguinte:

  1. Imprima a string vazia para stdout .
  2. Pipe stdout a stdin .

O que eu esperaria de escrever a string vazia para stdin is: nothing. O que aconteceu em vez disso: Um prompt > aparece, que se comporta como um bash no bash:

> echo m
m

Por que isso?

    
por Max Herrmann 13.12.2016 / 16:39

2 respostas

2

O que você está tentando canalizar? O | deve ser seguido por outro comando e o bash mostra > solicitando que você conclua o pipeline.

Para fazer as duas coisas:

  • Imprima a string vazia para stdout.
  • Pipe stdout para stdin.

    echo -n '' | gato

Aqui cat é apenas um espaço reservado para o segundo comando, que neste caso apenas envia seu stdin para o stdout.

    
por 13.12.2016 / 16:51
6

| é o operador para interconectar dois comandos.

cmd1 | cmd2

Inicia cmd1 e cmd2 em paralelo com o stdout de cmd1 conectado à extremidade de gravação de um pipe e o stdin de cmd2 conectado à extremidade de leitura do mesmo pipe.

Em:

cmd1 |

Você está sentindo falta do comando à direita.

O shell informa que, ao emitir o prompt secundário ( PS2 , por padrão, > ), solicitará o restante do seu comando.

Se você quisesse que o stdout de echo fosse o fim de um pipe, e seu stdin fosse o final de leitura daquele mesmo pipe (mas observe que echo não leu seu stdin), você precisaria usar um shell como yash que tem um operador para isso (o operador de redirecionamento de pipeline >>| ):

echo test 1>>|0

Isso diz ao yash para criar um pipe e atribuir o final da escrita a fd 1 (stdout) e o final da leitura a fd 0 (stdin).

Mais uma vez, isso faz pouco sentido.

    
por 13.12.2016 / 16:51

Tags