Sou um novo usuário do Linux e estava fazendo alguns experimentos e tentando entender o Process Substitution . Acredito que já tenha um entendimento básico sobre isso. Mas aqui está um caso que não sei porquê. Estou usando o Bash no Ubuntu 20.04.
echo hi
apenas envia a string hi
com um caractere de nova linha para stdout.
root@u2004:~# echo hi | od -a
0000000 h i nl
0000003
root@u2004:~#
cat
pode ler do pipeline como seu stdin e enviar o que leu para o pipeline.
root@u2004:~# echo hi | cat
hi
root@u2004:~# echo hi | cat | od -a
0000000 h i nl
0000003
root@u2004:~#
Pelo que entendi, o comando echo hi > >(cat)
também fará a cat
leitura de seu stdin (e imprimirá no console). Mas quando eu executo, eu tenho isso:
root@u2004:~# echo hi > >(cat)
root@u2004:~# hi
<the cursor blinks at this location>
Eu tenho que pressionar a Entertecla para terminar o comando.
root@u2004:~# echo hi > >(cat) root@u2004:~# oi Enter root@u2004:~#
Por que esse comportamento? Minha compreensão do comando echo hi > >(cat)
está correta?
Nada está errado, o comando foi concluído com sucesso.
O que você viu:
Você digitou o comando, bateu Enter. Seu shell imprimiu seu prompt e, em seguida, o
cat
processo, iniciado de forma assíncrona, conclui e cospe arquivoshi\n
.O cursor piscando na linha em branco pertence ao prompt da linha anterior, mas a nova linha do
echo
comando interrompeu sua exibição.O subsequente "pressionar enter" apenas fornece um novo prompt. Se você digitar um comando e pressionar enter, esse comando será executado.