Como canalizar toda a saída do terminal bash através do comando [duplicate]

5

Eu gostaria de poder canalizar todos os comandos do terminal bash através de um determinado comando (sem uma boa razão além de fazer uma brincadeira com alguém). Eu só quero canalizar o stdout de qualquer comando executado em um programa predeterminado sem fazer nada de especial.

Por exemplo: Se esse programa predeterminado foi cowsay

echo "Hello World"

deve sair

 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Como posso conseguir isso? (Alguns dos programas divertidos que eu gostaria de usar para fazer brincadeiras sobre os outros incluem rev , cowsay e lolcat )

    
por vikarjramun 01.06.2018 / 18:29

1 resposta

6
exec > >(COMMAND)

Em que COMMAND é rev , lolcat ou outro. Isso não funcionará com cowsay .

Por exemplo,

bash-4.3$ exec > >(rev)
bash-4.3$ echo hello
olleh

Explicação:

  • exec normalmente substitui o shell atual por outro processo, mas se você simplesmente der um redirecionamento como neste caso, o redirecionamento ocorrerá para o shell atual.
  • > redirect stdout
  • >(COMMAND) de entrada em COMMAND

Observe que, se você tiver um PROMPT_COMMAND , deverá direcioná-lo para stderr para evitar o stdout redirecionado.

    
por wjandrea 01.06.2018 / 18:39